Данные, на которые вы ссылаетесь, доступны с использованием специальных вызовов WMI. Вы можете запросить Win32_Process, чтобы получить всю информацию о конкретном процессе, и запросить Win32_PerfFormattedData_PerfProc_Process, чтобы получить количество потоков, и заданный дескриптор потока (что я считаю вашим поиском) вы можете запросить Win32_PerfRawData_PerfProc_Thread, чтобы получить процент используемого времени процессора.
Существует library available for Delphi, который предоставляет обертки для большинства запросов WMI, однако для получения точного запроса вам потребуется некоторое экспериментирование. Синтаксис запросов очень SQL, как, например, на моей системе, чтобы вернуть процент процессорного времени для ThreadId 8, идентификатор процесса 4 является:
SELECT PercentProcessorTime FROM Win32_PerfRawData_PerfProc_Thread
WHERE IdProcess=4 and IdThread=8
Большинство программ, которые присутствуют статистические данные о запущенных процессах в настоящее время используют WMI для запроса этой информации.
Но это дает вам время, затрачиваемое на поток, а не процент использования ЦП. Вы также можете получить общее время от вызовов WMI вместе с процентом в одном запросе. – skamradt
Я думаю, вы можете сделать вывод о количестве использования процессора, опросив каждую секунду, и если его «kernel + usertime» увеличивается на 1.0, что означает, что он использовал 100% одного ядра для этой секунды, да? – rogerdpack