2011-08-08 54 views
1

我需要記錄特定線程在Ready Queue中的時間和時間。 我想知道是否有一種編程方式可以用C#來實現。 如果您需要更多信息,請告訴我...我的線程是否在就緒隊列中?

在此先感謝, Rotem Varon。

+0

你想知道內核中哪個狀態是線程嗎?因爲你提到了「就緒隊列」.. –

+0

澄清: 這裏的最終遊戲是檢查一些線程集合(我無法控制,我不寫這些線程的代碼)需要多長時間等待CPU資源。 有沒有辦法獲得當前就緒隊列的快照? –

+0

以下詳細添加回答 –

回答

2

您可以檢查Thread對象的ThreadState屬性。

看到這裏的不可能性值:http://msdn.microsoft.com/en-us/library/system.threading.threadstate.aspx

WaitSleepJoin指出,它是在等待着什麼,Running意味着它是在「就緒隊列」據我所知。希望有所幫助。

+0

實際上,運行意味着它處於就緒隊列或當前正在執行中......或者在延遲就緒隊列或排隊隊列中 http://www.adamcarnahan.com/windows/NtExecution.jpg –

+0

謝謝您的回答。 我忘記提及的一條重要信息是,我沒有編寫線程的代碼。我只是一個觀察者。 我想主題應該改變爲「給定一個線程,我怎麼能知道這個線程是否處於就緒狀態?」或其他什麼... 謝謝, Rotem –

0

有關線程內核狀態的信息可在KTHREAD kernel structure中找到,可通過內核模式下的線程塊訪問。

問題是如何在用戶模式下表現它或將其暴露給程序?考慮到時間和技能,最好的解決方案可能是編寫一個內核驅動程序。

或者,你可以看看windows性能計數器,它可能已經爲你做了。無論如何,你不得不求助於不精確的輪詢(當線程改變狀態時你不會收到通知)。

Win32_Thread WMI class可能對您有用,特別是ExecutionState字段。

相關問題