Распечатка 7.10 Асинхронное уведомление с помощью SIGEV_THREAD

Предыдущая  Содержание  Следующая V*D*V

Распечатка 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, &notif)){

  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");

            ...

}

 

Предыдущая  Содержание  Следующая