Waitpid эквивалент с тайм -аутом?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Waitpid эквивалент с тайм -аутом?

Сообщение Anonymous »

Представьте, что у меня есть процесс, который начинает несколько дочерних процессов. Родитель должен знать, когда ребенок уходит. Поток, который заблокирован в waitpid , чтобы изящно выйти и присоединиться к нему. Приятно, что вещи убирают сами, но это может быть не так уж и важно. А затем поспите в течение какого -то произвольного времени, чтобы предотвратить напряженное ожидание. Однако тогда я могу только знать, когда ребенок выходил время от времени. В моем случае не может быть очень критическим, что я знаю, когда ребенок сразу же уходит, но я хотел бы знать как можно скорее ... < /p>

Я могу использовать сигнал Обработчик для Sigchld , и в обработчике сигнала делайте все, что я собирался делать, когда ребенок выходит, или отправьте сообщение в другой поток, чтобы сделать какое -то действие. Но использование обработчика сигнала немного запутывает поток кода. 5 сек. Поскольку выход процесса не является критической работой, я могу лениво сигнализировать поток в выход, при этом все еще заблокировав его в waitpid в остальное время, всегда готовое к реагированию. Есть ли такой вызов в Linux? Из альтернатив, какой из них лучше?
Другой метод, основанный на ответах, - это заблокировать sigchld во всех потоках с помощью pthread \ _sigmask () . Затем в одном потоке продолжайте звонить sigtimedwait () , ища sigchld . Это означает, что я могу провести время на этом вызове и проверить, должен ли поток выйти, а если нет, оставаться заблокированным в ожидании сигнала. После того, как Sigchld будет доставлен в этот поток, мы можем немедленно отреагировать на него и в строке потока ожидания, не используя обработчик сигнала.

Подробнее здесь: https://stackoverflow.com/questions/282 ... th-timeout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»