私の質問はリアルタイム処理に関するものではないかもしれませんが、そうかもしれません。
私のアプリケーションには、GUI よりもはるかに重要なスレッドがいくつかありますが、少なくとも GUI を使用できるようにしたいと考えています。常にロックしたくありません。実行中の処理の結果を考慮して、画面を更新したいと考えています。
現在、重要なアイテムはすべて別のスレッドに分離されており、GUI にデリゲートを呼び出して結果を表示しています。
私の GUI は動作しますが、タブを変更したり、最小化/最大化したりすると、他のスレッドが 0.1 秒の制限時間内に操作を実行できなくなるまで妨害されることが知られています。
これは、デリゲートを呼び出すために行っていることです。
delegate void FuncDelegate(ResultContainer Result);
FuncDelegate DelegatedDisplay= new FuncDelegate(DisplayResults);
//then later on
Invoke(DelegatedDisplay, Result);
私の重要なプロセスのほとんどは、さまざまなバッファー (ArrayLists および通常のリスト) からプルおよびプッシュして、連続ループで実行されるスレッドです。
私の重要なスレッドの 1 つは、次を使用して毎回起動されます。
Thread mythread = new Thread(new ThreadStart(ProcessResults));
mythread.Start();
スレッドをループで実行してリストからプルするのではなく、これを行うことを考えた理由は、クロック時間が不足している理由は、ポーリングループが多すぎると心配しているからだと思ったからです。リソース(ただし、ポーリングがマイナスになるたびに Thread.Sleep(5) を使用しています)。
並行プロセスが必要になるたびに新しいスレッドを起動すると、貴重な時間が費やされますか? これはループであるべきですか?私のループのせいですか?
スレッドに他のスレッドよりも高い優先度を与えることはできますか? それとも、Thread.Sleep を使用するしかありませんか? より高いスレッド優先度を割り当てた場合、他のスレッドが存続できることをどのように確認できますか?
単純なフォーム イベントが他のスレッドの妨げになっているのはなぜですか? GUI スレッドに割り当てるリソースの量を減らす方法はありますか? 他のスレッドが時間切れになった場合、Thread.Sleep を使用して Form イベントをブロックできますか?
私のすべてのイライラする質問への回答が足りないのですが、私の混乱を理解するために使用できるスレッドプロファイラーのようなものはありますか? 「Managed Stack Explorer」を使用してみましたが、どういうわけか、アプリケーションにあるスレッドが常に表示されるわけではありません。
この問題に関する助けがあれば、私は大いに役立ちます。