2013-10-25 3 views
0

Я приостанавливаю поток, используя событие. Когда eventSuspend сигнализируется, поток ожидает его.Как узнать, что поток находится в состоянии приостановлено

// inside the thread function 
WaitForSingleObject(eventSuspend, INFINITE); 

Теперь снаружи я поставил его ждать по eventSuspend.ResetEvent() но петля внутри функции потока вроде долго (много времени). Как я могу знать, что поток завершил все, что он делал, и теперь он действительно ждет этого сигнала?

+2

Просто используйте другое событие. –

+0

События @HansPassant - это ядерные объекты и вид дорогих (вялых), мне было интересно, могу ли я каким-то образом использовать одно и то же событие, но это не имеет смысла ... это так ... о, я думаю, возможно, используя событие автоматического сброса – zar

+0

Накладные расходы дополнительного объекта событий незначительны. –

ответ

0

Ваш вопрос не так: нить, которая ждет, не подвешена!

Нить приостановлена ​​после звонка SuspendThread(), но не после звонка WaitForSingleObject().

Просто установите флаг BOOL при запуске цикла потока и сбросьте флаг, когда петля потока завершена, и вы знаете, работает ли она или нет.

Если вы хотите futher информации о потоке, как если бы он supended или нет, вы можете использовать код, который я отправил здесь: How to get thread state (e.g. suspended), memory + CPU usage, start time, priority, etc

Смежные вопросы