2010-09-20 11 views
7

Czy istnieje sposób sprawdzania liczby wątków, które są obecnie uruchomione dla określonego procesu przy użyciu standardowych interfejsów API systemu Windows C/C++?Jak zapytać o liczbę wątków procesu przy użyciu zwykłych interfejsów API Windows C/C++

już krążył przez docs MSDN ale jedyną rzeczą, która przychodzi blisko jest

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

który odpytuje liczba system obsługuje aktualnie w użyciu przez danego procesu, który obejmie uchwyty wątek, ale nie będzie ograniczać się do nich.

Wszelkie spostrzeżenia będą mile widziane.

Z góry dziękuję.

Bjoern

Odpowiedz

5
+2

Dzięki za podpowiedź, wysłał mnie we właściwym kierunku. W rzeczywistości ta próbka jeszcze bardziej pasowała do tego, co było mi potrzebne: http://msdn.microsoft.com/en-us/library/ms686701(v=VS.85).aspx – Bjoern

+0

Cieszę się, że miło mi pomóc, a także opublikować odpowiedź. – Ivo

5

Wystarczy być kompletne tutaj jest jakiś przykładowy kod na podstawie próbki kodu, który można znaleźć pod linkiem podanym w sekcji komentarzy zaakceptowanej odpowiedzi:

#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 
Powiązane problemy