Спящая нить от другого - PullRequest
11 голосов
/ 09 декабря 2011

Учитывая два std :: thread A и B, есть ли способ, которым A может приостановить B без какого-либо специального кода в B для этой цели?

Обоснование: в настоящее время B является очень сложным алгоритмом, который должен корректно завершаться, когда A (поток мониторинга) сообщает ему об этом, периодически проверяя какой-либо общий флаг. Проблема в том, что для целей отладки я хотел бы точно знать, в каком состоянии B находится момент, когда A запрашивает такой выход (например, чтобы увидеть, где мы забыли проверить общий флаг), поэтому я бы хотел приостановить B (для отладки) A.

спасибо заранее! Broes

1 Ответ

6 голосов
/ 09 декабря 2011

Это зависит от системы.В Windows есть функция SuspendThread, но я признаю, что мало что знаю об этом.В Unix вы должны иметь возможность отправлять сигнал потоку, используя pthread_kill (который, несмотря на его имя, не уничтожает поток, а просто отправляет сигнал), и перехватывать его в целевом потоке, где находится обработчик сигналаможно позвонить sleep.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...