gpt4 book ai didi

c - 获取挂起线程的ThreadState

转载 作者:行者123 更新时间:2023-11-30 16:28:45 24 4
gpt4 key购买 nike

对于一个简单的采样分析器,我挂起一个目标线程,获取其当前的堆栈跟踪,然后继续它。现在,如果线程处于等待状态,我想以不同的方式突出显示示例。

所以我想知道线程在挂起时是否正在阻塞(通过 WaitForSingleObject 等待,通过 Sleep 暂停,...)。

我可以通过 NtQuerySystemInformation(SystemProcessInformation) 获取此信息,但这比需要的要多得多,每个进程的每个线程的信息。

我还看到了Performance Counters ,但我不确定如果我只有线程 ID/句柄,这个 API 是否可行。

更新:IInspectable 给了我一个提示 Wait Chain Traversal ,虽然它看起来很合适,但它返回所有挂起线程的状态 ObjectStatus==WctStatusBlocked ,这并非不合理,但对我的问题不起作用。我认为它也非常慢,因为它收集整个链的数据,而我只关心第一个元素。

最佳答案

虽然不完全是我想要的,QueryThreadCycleTime足够接近了。

因此每次线程被挂起时,QueryThreadCycleTime被调用,它返回该线程到目前为止使用的 CPU 时钟周期数。如果与前一次调用的差异低于某个限制,则当前样本被视为等待。

这并不完美,线程进入等待状态时获取的第一个样本未被检测为等待,并且该限制可能不适用于所有 CPU。

关于c - 获取挂起线程的ThreadState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52240779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com