Продолжаем изучать возможности ToolHelp.Dll. Давайте создадим консольное приложение и сразу код:
// TestThread.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "windows.h" #include "iostream.h" #include "tlhelp32.h" int main(int argc, char* argv[]) { HANDLE hSnap = NULL; THREADENTRY32 te32; hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (hSnap!=NULL) { if (Thread32First(hSnap, &te32)) { cout << te32.th32ThreadID << " " << te32.th32OwnerProcessID << endl; while (Thread32Next(hSnap, &te32)) cout << te32.th32ThreadID << " " << te32.th32OwnerProcessID << endl; } } CloseHandle(hSnap); return 0; }
Методика таже самая. Соединяемся с ToolHelp, только теперь смотрим Thread32First() и Thread32Next(), которые возвращают результат в структуру THREADENTRY32, из которой я пока извлек два параметра. Это идентификатор потока th32ThreadID и процесса, который этот поток породил th32OwnerProcessID и Вы увидите, что у процесса много потоков.