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

10,978

Solution 1

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

Solution 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 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
Share:
10,978
Kaushik Sarkar
Author by

Kaushik Sarkar

I am a Windows dev by trade, with some specialization in the integration of 3rd party media APIs, especially QuickTime and Windows Media.

Updated on June 15, 2022

Comments

  • Kaushik Sarkar
    Kaushik Sarkar almost 2 years

    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

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