Сонная нить из другого
Учитывая два std:: threads A и B, есть ли способ, которым A может приостановить B, без какого-либо специального кода в B для этой цели?
Обоснование: в настоящее время B - очень сложный алгоритм, который должен чисто выходить, когда A (поток мониторинга) сообщает об этом, периодически проверяя некоторый общий флаг.
Проблема в том, что для целей отладки я хотел бы точно знать, в каком состоянии B - момент, когда A запрашивает такой выход (например, чтобы увидеть, где мы забыли проверить общий флаг), поэтому я хотел бы приостановить B (для отладки) с а.
Заранее благодарим!
Broes
Ответы
Ответ 1
Это зависит от системы. У Windows есть функция SuspendThread
, но я признаю, что я мало знаю об этом. В Unix вы должны иметь возможность посылать сигнал в поток с помощью pthread_kill
(который, несмотря на свое имя, не убивает поток, а просто посылает сигнал) и улавливает его в целевом потоке, где обработчик сигнала может вызвать sleep
.