我需要記錄特定線程在Ready Queue中的時間和時間。 我想知道是否有一種編程方式可以用C#來實現。 如果您需要更多信息,請告訴我...我的線程是否在就緒隊列中?
在此先感謝, Rotem Varon。
我需要記錄特定線程在Ready Queue中的時間和時間。 我想知道是否有一種編程方式可以用C#來實現。 如果您需要更多信息,請告訴我...我的線程是否在就緒隊列中?
在此先感謝, Rotem Varon。
您可以檢查Thread
對象的ThreadState
屬性。
看到這裏的不可能性值:http://msdn.microsoft.com/en-us/library/system.threading.threadstate.aspx
WaitSleepJoin
指出,它是在等待着什麼,Running
意味着它是在「就緒隊列」據我所知。希望有所幫助。
實際上,運行意味着它處於就緒隊列或當前正在執行中......或者在延遲就緒隊列或排隊隊列中 http://www.adamcarnahan.com/windows/NtExecution.jpg –
謝謝您的回答。 我忘記提及的一條重要信息是,我沒有編寫線程的代碼。我只是一個觀察者。 我想主題應該改變爲「給定一個線程,我怎麼能知道這個線程是否處於就緒狀態?」或其他什麼... 謝謝, Rotem –
有關線程內核狀態的信息可在KTHREAD kernel structure中找到,可通過內核模式下的線程塊訪問。
問題是如何在用戶模式下表現它或將其暴露給程序?考慮到時間和技能,最好的解決方案可能是編寫一個內核驅動程序。
或者,你可以看看windows性能計數器,它可能已經爲你做了。無論如何,你不得不求助於不精確的輪詢(當線程改變狀態時你不會收到通知)。
該Win32_Thread WMI class可能對您有用,特別是ExecutionState
字段。
你想知道內核中哪個狀態是線程嗎?因爲你提到了「就緒隊列」.. –
澄清: 這裏的最終遊戲是檢查一些線程集合(我無法控制,我不寫這些線程的代碼)需要多長時間等待CPU資源。 有沒有辦法獲得當前就緒隊列的快照? –
以下詳細添加回答 –