Распечатка 7.10 Асинхронное уведомление с помощью SIGEV_THREAD |
Предыдущая Содержание Следующая |
Распечатка 7.10.
struct sigevent notif; sigset_t sig_set; siginfo_t info; ....
/* * Указываем уведомление как SIGEV_THREAD. Обратите внимание, * что когда вызывается функция уведомления, она работает в * отдельном потоке */ notif.sigev_notify = SIGEV_THREAD; /* Процедура уведомления, которая будет вызвана */ notif.sigev_notify_function = notify_routine;
/* * Передаём в функцию уведомления, когда она вызывается, * id очереди сообщений как аргумент */ notif.sigev_value.sival_int = ds; /* Поток уведомления должен быть в состоянии DETACHED */ notif.sigev_notify_attributes = NULL;
/* Наконец, настраиваем уведомление */ if (mq_notify(ds, ¬if)){ perror("mq_notify"); return -1; } ....
/* * .. а это процедура уведомления. Она будет вызываться * каждый раз при поступлении в очередь сообщения. */ void notify_routine(sigval_t value){ ... /* Теперь, конечно, можно получить это сообщение. */ if ((len = mq_receive(value.sival_int, new_text, SIZE, &prio)) == -1) perror("Receiving message error"); ... }
|
Предыдущая Содержание Следующая |