Как запросить количество потоков процесса с помощью обычных API C / C ++ для Windows - PullRequest
8 голосов
/ 20 сентября 2010

Есть ли способ запросить количество потоков, которые в данный момент выполняются для определенного процесса, используя стандартные API-интерфейсы Windows C / C ++?

Я уже пролистал документы MSDN, но единственное, что подходит, это

BOOL WINAPI GetProcessHandleCount(
  __in     HANDLE hProcess,
  __inout  PDWORD pdwHandleCount
);

, который запрашивает количество системных дескрипторов, используемых в данный момент данным процессом, который будет включать дескрипторы потоков, но не будет ограничен ими.

Любая идея будет принята с благодарностью.

Заранее спасибо.

Бьорн

Ответы [ 2 ]

8 голосов
/ 20 сентября 2010

Для завершения приведу пример кода, основанного на примере кода, который можно найти по ссылке, указанной в разделе комментариев принятого ответа:

#if defined(_WIN32)

#include <windows.h>
#include <tlhelp32.h>

/**
Returns the thread copunt of the current process or -1 in case of failure.
*/
int GetCurrentThreadCount()
{
    // first determine the id of the current process
    DWORD const  id = GetCurrentProcessId();

    // then get a process list snapshot.
    HANDLE const  snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPALL, 0 );

    // initialize the process entry structure.
    PROCESSENTRY32 entry = { 0 };
    entry.dwSize = sizeof( entry );

    // get the first process info.
    BOOL  ret = true;
    ret = Process32First( snapshot, &entry );
    while( ret && entry.th32ProcessID != id ) {
        ret = Process32Next( snapshot, &entry );
    }
    CloseHandle( snapshot );
    return ret 
        ?   entry.cntThreads
        :   -1;
}

#endif // _WIN32
5 голосов
/ 20 сентября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...