2011-08-08 3 views
1

特定のスレッドがレディキューに入っている時間と所要時間を記録する必要があります。 C#でそれを行うためのプログラム的な方法があるのだろうかと思います。 詳細情報が必要な場合は教えてください...私のスレッドはReady Queueにありますか?

ありがとうございます。 Rotem Varon。

+0

カーネルのどのスレッドがスレッドであるかを知りたいですか? –

+0

説明: ここでの最終的なゲームは、スレッドのいくつかのセット(私が制御できない、それらのスレッドのコードを書いていない)がCPUを待っている時間をチェックすることですリソース。 現在のレディキューのスナップショットを取得する方法はありますか? –

+0

詳細は以下の回答を追加しました –

答えて

2

ThreadオブジェクトのThreadStateプロパティを確認できます。

は、ここでpossibileの値を参照してください:http://msdn.microsoft.com/en-us/library/system.threading.threadstate.aspx

WaitSleepJoinはそれが何かを待っています示し、Runningはそれが私の知る限り「レディキュー」であることを意味します。希望が役立ちます。

+0

実際には、実行可能キューに入っているか、現在実行中のキューまたは遅延キューにあるかのどちらかです。 http://www.adamcarnahan.com/windows/NtExecution.jpg –

+0

あなたの答えをありがとう。 私が言及していなかった重要な情報の1つは、スレッドのコードを記述していないことです。私はただのオブザーバーです。 件名は「スレッドが与えられたときに、このスレッドが準備完了状態になっていればどうすればわかるのですか?」と変更する必要があると思います... ありがとう、 Rotem –

0

スレッドのカーネル状態に関する情報は、カーネルモードのスレッドブロックからアクセスできるKTHREAD kernel structureで利用できます。

質問は、それを表面に描いたり、ユーザーモードでプログラムに公開する方法ですか?おそらく、時間とスキルが与えられた最良の解決策は、カーネルドライバを書くことです。

また、Windowsのパフォーマンスカウンタを参照することもできます。これは、すでに実行している可能性があります。どんな場合でも、不正確なポーリングに頼らざるを得ません(スレッド変更状態の通知はありません)。

Win32_Thread WMI classが便利です(特に、ExecutionStateフィールド)。

関連する問題