LINUX.ORG.RU

Прерывание функции из потока


0

1

Есть 2 функции работающие с сетью: Одна - главная. В цикле while делает свою работу постоянно. Прекращает свою работу только в случае критической ошибки. Прекращение работы этой функции == прекращение работы приложения. Вторая функция(пока не написанная) должна слушать сокет для приема команд. Соответственно, одна из команд - приостановка работы основной функции. Хочется сделать по потоку на каждую функцию. Думаю, можно использовать для этого сигналы, но нужно что-бы процесс обрабатывал сигналы только от себя.

Можно ли реагировать на сигналы только от своего процесса? Может быть сделать проще? Глобальная переменная, которая постоянно проверяется осн. функцией? Еще варианты? Язык: Си.

а упомянутые функции много чем ещё обмениваются ? и часто ли..если между «функциями» вся связь запрос_от_одной короткий_ответ_от_другой, то напрашивается классика жанра fork,сигналы и общая память

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

могут ли сигналы и shm использоваться только для одного процесса(или, в случае с fork, для группы процессов)?

Вообщем схама такая... Управление: 0) Ждать данные на сокете 1) Считать команду из сокета. 2) Если команда stop, как нибудь прекратить выполнение do_work() 3) Получить статус остановки 4) Отправить статус клиенту. 5) Шаг 0

Работа do_work() 1) Собрать данные 2) Послать данные в мир 3) Спать 5-10 сек 4) Шаг 1 99) Уметь останавливаться по команде отуправления.

greek_31 ★★
() автор топика
Ответ на: комментарий от greek_31

Работа do_work() ... 3) Спать 5-10 сек

До вызова do_work() использовать pipe(). Вместо sleep() вызвать select() на читающем pipefd с таймаутом в твои 5-10 сек. В do_control() при необходимости остановить do_work() послать в записывающий pipefd что-то.

В итоге select() работает как sleep(), если всё ОК и мгновенно вернётся, если через pipefd придут данные («сигнал» останова).

gag ★★★★★
()

Может быть сделать проще?

Да.

Глобальная переменная, которая постоянно проверяется осн. функцией?

Да. См. <stdatomic.h> на предмет _Atomic.

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.