'How to query the thread count of a process using the regular Windows C/C++ APIs

Is there a way to query the number of threads that are currently running for a specific process using the standard Windows C/C++ APIs?

I already prowled through the MSDN docs but the only thing that comes near is

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

which queries the number of system handles currently in use by a given process, which will include thread handles, but will not be limited to them.

Any insights would be greatly appreciated.

Thanks in advance.

Bjoern



Solution 1:[1]

See this example: http://msdn.microsoft.com/en-us/library/ms686852(v=VS.85).aspx

Solution 2:[2]

Just to be complete here is some sample code based on the code sample, which can be found under the link stated in the comments section of the accepted answer:

#if defined(_WIN32)

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

/**
Returns the thread count 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 current 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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ivo
Solution 2 Don Reba