Спите поток в течение неопределенного времени в Linux - PullRequest
5 голосов
/ 01 сентября 2011

Я хочу, чтобы поток спал на неопределенное время.Причина, по которой я хочу это сделать, заключается в том, что моя программа выполняет действия только тогда, когда она получает сигнал и ей нечего делать в основном потоке.Следовательно, вся обработка выполняется внутри обработчика сигнала.Как я могу спать неограниченное количество времени?

Ответы [ 4 ]

12 голосов
/ 01 сентября 2011

Я полагаю, вы ищете функцию pause:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/pause.html

Вы можете сделать что-то вроде: for (;;) pause();

8 голосов
/ 01 сентября 2011

Если вы просто что-то делаете в другом потоке, просто вызовите pthread_join в этом потоке, и он в значительной степени заблокирует «навсегда».Вы можете добиться того же эффекта, используя переменную условия.

4 голосов
/ 01 сентября 2011

Используйте семафоры!

Ваш поток заблокирован на семафор с помощью sem_wait. Как только вам нужно разбудить ваш поток, сообщите семафору, используя sem_post из другого потока.

1 голос
/ 02 сентября 2011

POSIX предоставляет функцию sigsuspend для ожидания сигнала.(Как уже упоминалось в другом ответе, pause также работает.)

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