2011-01-14 33 views
1

複数のスレッドを実行するプログラムがありますが、一部のスレッドでCPUが過負荷になることがあります。私はこれらのスレッドのCPU使用量を%50に制限する必要があります。それはDelphiで可能ですか?DelphiでスレッドのCPU使用率を追跡する方法

編集:申し訳ありませんが、私の質問は明確ではありませんでした。

実際にスレッドを追跡して(少なくともスレッドIDでスレッドリストを作成する)、CPUが各スレッドをどれだけ使用しているかを知りたいと思っています。しかし、私はこれを行うために、どのスレッドがCPUのオーバーロードを起こしているのかを知ることができます。

ご迷惑をおかけして申し訳ありません。

+0

より高い優先度で実行したいスレッドよりも低い優先度でスレッドを実行してください。 –

+0

すべてのスレッドは同じことをしています。しかし時には、いくつかのスレッドがCPUのオーバーロードを開始することがあります。 – waffles

+0

@waffles私はあなたのアプリケーションが所有していない他のスレッドより低い優先順位を意味します。私は自分が言ったことを意味する。しかし、私はあなたが睡眠(0)をしなければならないとは思わない、彼は言ったように、それは私には意味がない。 –

答えて

2

私が知る限り、「CPU使用を制限する」ことはできません.DelphiやWindows自体ではできません。

他のものが必要な可能性があります。ユーザーの操作や他のスレッドに干渉しないようにします。しかし、何も起こっておらず、ユーザーが何もしていない場合、なぜあなたはできるだけ遅く走るのですか? CPUの100%を使用するだけで、誰もそれを必要としません!

これらのスレッドがユーザーの操作を妨げないようにするには、Windows関数SetThreadPriorityを使用して優先度を低く設定します。ユーザーはプロセッサ電源を必要としない場合にのみ実行されます。

他のスレッドを実行する機会を増やす別のトリックは、スレッド本体でスリープ(0)を時々呼び出すことです。 Sleep()を呼び出すたびに、単にOSに別のスレッドに切り替えるように指示します。

+0

質問:「どのように私はDelphiでスレッドのCPU使用率を追跡できますか?」 – ComputerSaysNo

+0

@Dorin質問をもう一度読んでください。それがタイトルですが、それを制限する方法を具体的に質問しています。おそらくタイトルは質問を反映するように修正されるべきですが、それは投票を正当化するものではありません。 –

3

私はあなたの質問への答えは、次のスタックオーバーフローの質問に見つけることができると思う:How to get the cpu usage per thread on windows (win32)

しかし、あなたが嫌い​​なスレッドを殺すのではなく、プログラムが動作している理由を理解し、問題の根本を攻撃するように努めてください。もちろん、問題のプログラムがあなた自身の私的使用のためのものであれば、あなたのアプローチは完全に便宜的で実用的なものになるかもしれません。しかし、専門的なソフトウェアを書いているのであれば、ビジーなスレッドを殺すことは合理的なアプローチのように聞こえる状況はありません。

0

フレームワーク(http://www.csinnovations.com/framework/framework.htm)でいくつかのコードを使用して、すべてのアプリケーションでスレッドごとのローリングCPU使用率を追跡します。ログ出力は次のようになります。

15/01/2011 11:17:59.631、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0.1、メインスレッド、メモリチェック、詳細、グローバル "システム割り当てメモリ= 8282615808バイト(最終チェックからの変更= 4872478720バイト) "

15/01/2011 11:17:59.632、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0.1、メインスレッド、メモリチェック、冗長、グローバル、 "プロセス割り当てメモリ= 152580096バイト(最後のチェック= -4579328バイト以降の変更)"

15/01/2011 11:17:59.633、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0.1 、メインスレッド、CPUチェック、冗長、グローバル "システムCPU使用率= 15.6%(平均寿命= 3.0%)"

15/01/2011 11:17:59.634、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0.1、メインスレッド、CPUチェック、冗長、グローバル "プロセスCPU使用率= 0.5%(平均寿命= 0.7%) "

15/01/2011 11:17:59.634、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0.1メインスレッド、CPUチェック、Verbose、グローバル"スレッドCPU使用率= 0.0%(平均寿命超過= 0.0%) "

15/01/2011 11:17:59.634、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0。1、メインスレッド、CPUチェック、冗長、グローバル "スレッドCPU使用率= 0.0%(平均寿命超過= 0.0%)"

15/01/2011 11:17:59.634、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0.1、メインスレッド、CPUチェック、冗長、グローバル "スレッドCPU使用率= 0.0%(平均寿命超過= 0.0%)"

15/01/2011 11:17:59.635、Misha 、MISHA-DCDEL、スコアクライアント、V0.2.0.1、メインスレッド、CPUチェック、冗長、グローバル "スレッドCPU使用率= 0.1%(平均寿命超過= 0.1%)"

15/01/2011 11 :17:59.635、Misha-DCDEL、スコアクライアント、V0.2.0.1、メインスレッド、CPUチェック、冗長、グローバル "スレッドCPU使用率= 0.0%(平均寿命= 0.0%)"

15/01/2011 11:17:59.635、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0.1、メインスレッド、CPUチェック、Verbose、グローバル、「スレッドCPU使用率= 0.3%(平均寿命= 0.5%) "

15/01/2011 11:17:59.635、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0.1メインスレッド、CPUチェック、Verbose、グローバル"スレッドCPU使用率= "0.0%(平均寿命= 0.0%)"

15/01/2011 11:17:59.635、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0.1、メインスレッド、CPUチェック、冗長、グローバル"スレッドCPU使用率= 0.0%(平均寿命= 0.0%)"

15/01/2011 11:17:59.636、Misha、MISHA-DCDEL、スコアクライアント、V0.2.0.1、メインスレッドCPU使用率= 0.0%(平均寿命= 0.0%)」

15/01/2011 11:17:59.636、Misha、Misha-DCDEL、スコアクライアント、V0、CPUチェック、冗長、グローバル「スレッドCPU使用率= 0.1%(平均寿命= 0.1%)」

時間は設定可能で、10秒、 1分、または10分。 CsiSystemUnt.pasファイルとAppGlobalsUnt.pasファイルを見て、どのように処理されているかを確認してください。

乾杯、Misha

PSメモリの使用状況も確認します。

関連する問題