У меня есть два события, которые запускаются и обрабатываются двумя обработчиками событий. В EventHandler2
запущен boost::thread
. В EventHandler2 приложение ожидает завершения этого потока, вызвав на нем join()
.Как подождать, пока нить присоединится, только если он был запущен
Это хорошо работает на быстрых компьютерах, потому что событие, начавшее поток, всегда запускалось первым, перед другим событием, которое вызвало приложение ait для join()
. Однако на старых машинах события запускаются в другом порядке (потому что есть некоторые тяжелые вычисления, которые нужно выполнить до того, как вызывается EventHandler2
). Так что EventHandler1
вызывается первым и не ждет, так как join()
немедленно возвращается (нить еще не запущена, потому что 2-й случай не был запущен). Какое лучшее я могу здесь сделать? Мне нужно заблокировать мьютексы, а затем дождаться его, прежде чем я вызову join()
. Таким образом, я уверен, что поток запускается до того, как на него вызывается join()
. Каков наилучший образец для использования в этом случае? Спасибо!
http://stackoverflow.com/questions/9094422/how-to-check-if-a-stdthread-is-still-running, длинный рассказ: используйте bool. – lorro
'std :: atomic' может быть тем, что вы ищете ... –