tags:

views:

74

answers:

2

Hi all.

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

+2  A: 

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

Ivo
Thanks for the hint, it sent me in the right direction. Actually this sample even more matched what I needed: http://msdn.microsoft.com/en-us/library/ms686701(v=VS.85).aspx
Bjoern
Glad to help, nice of you to also post an answer.
Ivo
+1  A: 

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 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
Bjoern