0

私のプログラム(基本的なタスクマネージャー)では、プロセスのリストを監視し、プロセスに変更を加えることを許可します(たとえば、プロセスを強制終了するか、その優先度を上げます)。

これを実装するために、次のように設計します。1つのスレッドはすべての作業を行うワーカースレッドであり、1つのスレッドはGUIのステータスを更新しています。プロセスリストがあり、私はそれをスレッドセーフにするためにロックを使用しています。問題は、すべてのプロセスを一定の間隔(たとえば、1秒)でスキャンしていることです。その間、別のスレッドがリストを処理しているため、リストを変更できません。したがって、私のプログラムは時々操作を表示するために遅れます

これは良いデザインですか?それを改善するために私は何ができますか?インターバル値を下げると思います。

4

1 に答える 1

1

共有リストを使用するのではなく、マスター リストであるワーカー スレッドが維持するリストを使用することを検討してください。スキャンが完了すると、マスター リストのコピーが GUI スレッドに渡されます。次に、GUI スレッドは、コピーに含まれる新しい情報で GUI を更新できますが、ワーカー スレッドは別のスキャンを実行できます。

これにより、ワーカー スレッドは 1 つのリストにのみ書き込み、コピーを (同じスレッドで) 作成するため、ロックの必要がなくなります。

このアプローチの問題の 1 つは、GUI が更新できるよりも速くバックグラウンド ワーカーが新しいプロセス リストを収集できる場合にどうなるかということです。以前の更新をまだ処理している間に、新しいプロセス リストの受信に対処できる必要があります。

于 2013-01-20T11:51:18.830 に答える