【发布时间】: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