Распечатка 7.9 Асинхронное уведомление с помощью SIGEV_SIGNAL |
Предыдущая Содержание Следующая |
Распечатка 7.9.
struct sigevent notif; sigset_t sig_set; siginfo_t info; ....
/* Сигналом уведомления является SIGUSR1. */ sigemptyset(&sig_set); sigaddset(&sig_set, SIGUSR1);
/* * Блокируем SIGUSR1, так как мы будем ждать его * в вызове sigwaitinfo */ sigprocmask(SIG_BLOCK, &sig_set, NULL);
/* Теперь настраиваем уведомление */ notif.sigev_notify = SIGEV_SIGNAL; notif.sigev_signo = SIGUSR1;
if (mq_notify(ds, ¬if)){ perror("mq_notify"); return -1; }
/* * Если в очередь поступит сообщение, будет * доставлен SIGUSR1 */ do { sigwaitinfo(&sig_set, &info); } while(info.si_signo != SIGUSR1);
/* Теперь можно принять сообщение. */ if (mq_receive(ds, new_text, SIZE, &prio) == -1) perror("Receiving message error");
....
|
Предыдущая Содержание Следующая |