Для простого профилировщика выборки я приостанавливаю целевой поток, получаю его текущую трассировку стека и продолжаю его.
Теперь я хотел бы выделить образец по-другому, если поток находился в состоянии ожидания.
Итак, я хочу знать, блокировался ли поток (ожидание через WaitForSingleObject, пауза через Sleep, ...) во время приостановки.
Я могу получить эту информацию через NtQuerySystemInformation (SystemProcessInformation) , но она получает гораздо больше, чем необходимо, информации о каждом потоке каждого процесса.
Также я видел Счетчики производительности , но я не уверен, возможно ли с этим API, если у меня есть только идентификатор / дескриптор потока.
UPDATE:
IInspectable дал мне подсказку с Wait Chain Traversal , хотя он казался подходящим, он возвращает статус ObjectStatus==WctStatusBlocked
для всех приостановленных потоков, что не является необоснованным, но не работает для моей проблемы , Это также очень медленно, я полагаю, потому что он собирает данные для всей цепочки, в то время как я забочусь только о первом элементе.