【问题标题】:Is my thread in the Ready Queue?我的线程在就绪队列中吗?
【发布时间】:2011-08-08 16:45:58
【问题描述】:

我需要记录特定线程在就绪队列中的时间和时间。 我想知道是否有一种编程方式可以用 C# 做到这一点。 如果您需要更多信息,请告诉我...

提前致谢, Rotem Varon。

【问题讨论】:

  • 你想知道内核中的线程处于什么状态吗?既然你提到了“就绪队列”..
  • 澄清:这里的最终游戏是检查一些线程集(我无法控制,我没有为这些线程编写代码)等待 CPU 资源的时间。有没有办法获取当前就绪队列的快照?
  • 在下面添加了详细答案

标签: c# windows multithreading winapi


【解决方案1】:

您可以检查Thread 对象的ThreadState 属性。

在此处查看可能的值:http://msdn.microsoft.com/en-us/library/system.threading.threadstate.aspx

WaitSleepJoin 表示它正在等待某些东西,Running 表示据我所知它在“就绪队列”中。希望对您有所帮助。

【讨论】:

  • 其实运行的意思是要么在就绪队列中,要么正在执行中……要么在延迟的就绪队列或待机队列adamcarnahan.com/windows/NtExecution.jpg
  • 感谢您的回答。我忘记提及的一条重要信息是我没有为线程编写代码。我只是一个观察者。我想主题应该改为“给定一个线程,我怎么知道这个线程是否处于就绪状态?”什么的...谢谢,Rotem
【解决方案2】:

有关线程内核状态的信息在KTHREAD kernel structure 中可用,可通过内核模式下的线程块访问。

问题是如何在用户模式下将其显示或暴露给程序?考虑到时间和技能,最好的解决方案可能是编写内核驱动程序。

或者,您可以查看 Windows 性能计数器,它可能已经为您完成了。在任何情况下,您都必须使用相当不精确的轮询(当线程更改状态时您不会收到通知)。

Win32_Thread WMI class 可能对您有用,尤其是ExecutionState 字段。

【讨论】:

    猜你喜欢
    • 2018-05-07
    • 2015-07-07
    • 1970-01-01
    • 2011-03-11
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多