Вопрос
Есть основной поток п1, который запускает поток п2, а поток п2 может запускать много потоков п3.1, п3.2… Из п1 мне требуется узнавать, работает ли п2, и узнать количество п3.
Ответ
Из п1 вызови функцию:
BOOL GetExitCodeThread(HANDLE hThread, PDWORD pdwExitCode);
где hThread — HANDLE потока п2.
Если поток п2 активен, в переменную dwExitCode, адрес которой — второй параметр функции, будет возвращено значение STILL_ACTIVE.
Для того, чтобы определить количество п3, заведи глобальную переменную, инициализированную нулем:
LONG glThread_3_Count = 0;
В потоке п3, при его старте, вызови функцию:
LONG InterlockedExchangeAdd(PLONG plAddend, LONG lIncrement);
где plAddend — адрес твоей глобальной переменной glThread_3_Count,
lIncrement — величина приращения, в твоем случае 1.
В потоке п3, при его завершении, снова вызови функцию InterlockedExchangeAdd, но в качестве второго параметра передай -1.
Из потока п1 можно просто читать значение glThread_3_Count, это будет текущее количество активных потоков п3.
Андрей Шуклин
вход* выходные потоки с++
Copyright 2000-2004 Сообщество Чайников
Контактная информация