СообЧа > База Знаний > Программирование > C, С++

Вопрос

Есть основной поток п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 Сообщество Чайников
Контактная информация