【问题标题】:How to check if a thread is waiting?如何检查线程是否正在等待?
【发布时间】:2014-01-27 13:23:07
【问题描述】:

出于分析和监控的目的,我想知道一个线程当前是处于活动状态(使用 CPU 时间)还是处于等待或休眠状态。

有没有办法查明线程当前是否处于各种 Windows 内核等待函数之一中?

从WaitForSingleObject到各种互斥锁、休眠、临界区、IOCP GetQueuedCompletionStatus等I/O函数等,有不少函数会导致线程等待。

是否有标准方法可以知道线程是否在等待?

【问题讨论】:

  • 从 ProcessThread.WaitReason 很好地在 .NET 中可用。在本机代码中不太可用,.NET 使用几乎没有记录的 NtQuerySystemInformation()。 Win32_Thread WMI 类提供了它。
  • 我已经注意到了,但是 WMI 不是非常慢并且意味着不经常查询吗?分析器必须每秒调用千分之一的时间,最好使用可忽略的 CPU 使用率(否则分析器将最大化海森堡效应)

标签: windows multithreading profiling wait


【解决方案1】:

Wait Chain Traversal API 可以满足您的要求。还有更多。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多