Windows 如何检查线程是否正在等待?

Windows 如何检查线程是否正在等待?,windows,multithreading,profiling,wait,Windows,Multithreading,Profiling,Wait,为了分析和监视,我想知道线程当前是否处于活动状态(使用CPU时间),或者它是否正在等待或休眠 有没有办法确定线程当前是否在各种Windows内核等待函数中 从WaitForSingleObject到各种互斥、睡眠、临界区、IOCP GetQueuedCompletionStatus和其他I/O函数等。有相当多的函数可能导致线程等待 有没有一种标准方法可以知道线程是否正在等待?API会按照您的要求执行。除此之外还有很多 这里可能会有帮助。在.NET中可以从ProcessThread.WaitRea

为了分析和监视,我想知道线程当前是否处于活动状态(使用CPU时间),或者它是否正在等待或休眠

有没有办法确定线程当前是否在各种Windows内核等待函数中

从WaitForSingleObject到各种互斥、睡眠、临界区、IOCP GetQueuedCompletionStatus和其他I/O函数等。有相当多的函数可能导致线程等待


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

API会按照您的要求执行。除此之外还有很多

这里可能会有帮助。在.NET中可以从ProcessThread.WaitReason很好地获得。在本机代码中没有那么好的可用性,几乎没有文档记录的NtQuerySystemInformation()被.NET使用。Win32_线程WMI类提供了它。我注意到了它,但是WMI不是非常慢,并且用于不频繁的查询吗?分析器必须每秒调用千分之一的时间,最好CPU使用率可以忽略不计(否则分析器将最大化海森堡效应),尽管它似乎是为调试器设计的,我怀疑它可能不是很快。根据这个问题,你正在编写一个广义的调试器。不管怎样,你总是可以尝试一下,看看性能如何。我没有提到perf,因为问题没有涉及到它。好吧,我写了评测,如果评测应用的性能很低,它通常会通过海森堡效应变得无关紧要。在这种情况下,我非常抱歉。