Как узнать, что поток находится в приостановленном состоянии

0

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

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

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

  • 2
    Просто используйте другое событие.
  • 0
    События @HansPassant являются объектами ядра и довольно дорогими (вялыми), мне было интересно, могу ли я каким-то образом использовать одно и то же событие, но это не имеет смысла .. делает это :) о, я думаю, возможно, используя событие автоматического сброса
Показать ещё 6 комментариев
Теги:
multithreading
mfc

1 ответ

0

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

Поток приостанавливается после вызова SuspendThread() но не после вызова WaitForSingleObject().

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

Если вы хотите получить более подробную информацию о потоке, например, если это произойдет или нет, вы можете использовать код, который я разместил здесь: как получить состояние потока (например, приостановлено), память + использование ЦП, время начала, приоритет и т.д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню