C# コンソール アプリケーションで連続して関数を呼び出します。無限ループと再帰を使用しないと、それらを使用するとCPUの使用量が増えるため、この問題を解決するのを手伝ってくれる人がいます.バックグラウンドスレッドを使用することを提案する人もいますが、関数を継続的に呼び出すことはありません.
Thread th = new Thread(//fun);
th.IsBackground = true;
th.start();
C# コンソール アプリケーションで連続して関数を呼び出します。無限ループと再帰を使用しないと、それらを使用するとCPUの使用量が増えるため、この問題を解決するのを手伝ってくれる人がいます.バックグラウンドスレッドを使用することを提案する人もいますが、関数を継続的に呼び出すことはありません.
Thread th = new Thread(//fun);
th.IsBackground = true;
th.start();
私はあなたの答えを得ることができませんが、スレッドがどのように機能するかを説明させてください。
スレッド
ほとんどのプログラミング言語では、スレッド化は、実行を同期実行に効果的に分割する方法です。これが意味するのは、2つのメソッドを同時に実行できるということです。
スレッドの一般的な使用法
スレッドの使用例の1つは、サーバー上の着信接続をリッスンすることです。したがって、次のようなスレッドがあります。
while(true)
{
// Listen to incoming messages.
}
無限ループは、どの時点でも、着信メッセージのリッスンを停止したいためです。それがサーバーの役割です。接続を管理します。ただし、プログラムの実行が終了すると、スレッドは強制終了されます。これが一般的な方法と見なされる理由は、これが別のスレッドで実行されるため、思ったほどパフォーマンスに影響を与えないためです。C#は、複数のスレッドの処理に非常に優れています。ほとんどの言語がそうであるように。
代替案
さて、このように見てください。1000サイクルリッスンしたい場合は、次のようにします。
while(count < 1000)
{
count++;
// Do some thread code.
}
それは本当にあなたがスレッドを望むもの、スレッドに入るコードを定義するもの、そしてそれが実行される時間に依存します。
間隔の短いシステムタイマーを使用してください。
タイマーの「ティック」イベントの場合:
システムタイマーのイベントはスレッドプールスレッドで実行されるため、コンソールアプリスレッドは通常どおり続行されます。この関数は、アプリケーションの期間中、間隔が許す限り頻繁に実行されます。再帰はありません。無限ループはありません。
継続的に呼び出したい場合は、CPU 使用率を高くする必要があります。CPU は常に必要な処理を行っているためです。
CPU 使用率を低くしたい場合は、関数を連続して実行することはできず、(おそらく非常に短い) 間隔でのみ実行します。
あなたが決めなければなりません。
Thread コードを使用できますが、スレッドは関数を効果的に呼び出すだけです。これは、関数が再帰的である必要があるか、無限ループが必要であることを意味します。
public void StartThread()
{
Thread th = new Thread(function);
th.IsBackground = true;
th.start();
}
public void function()
{
//preferably have some way of killing this if needs be so don't necessarily use 'true'
while(true)
{
//do stuff
//sleep an appropriate amount of time to not overload the cpu
//This sleeps (basically pauses thread) for 10 milliseconds
Thread.Sleep(10);
}
}
Thread.Sleep を追加すると、参照していた CPU の過負荷が停止します。アプリケーションで許容できる時間だけ sleep を実行してください。GUI で値を更新している場合、ユーザーは、値が 0.5 秒ごと (Thread.Sleep(500)) ごとに更新されるか、ミリ秒ごと (Thread.Sleep(1)) ごとに更新されるかを実際には認識しません。