POSIX异步事件

#include <signal.h>

union sigval {
    int sival_int;
    void *sival_ptr;
};

struct sigevent {
    int sigev_notify;   // 通知类型 
    int sigev_signo;    // 通知信号
    union sigval sigev_value;
    void (*sigev_notify_function)(union sigval);    // 线程函数
    pthread_attr_t *sigev_notify_attributes;
};

结构体 sigevent 用于发出异步通知。一些可以产生异步事件的函数使用 sigevent 指定通知的方法。
字段 sigev_notify 指定异步事件发生时使用的通知机制,可以使用以下的值:

  • SIGEV_NONE 事件发生后,不发出通知。
  • SIGEV_SIGNAL 事件发生后,为进程产生 sigev_signo 字段中指定的信号。如果接受进程使用 sigaction() 创建处理函数时设置了 SA_SIGINFO 标志, sigev_value 将会通过 siginfo_t 参数传递到处理函数中。
  • SIGEV_THREAD 事件发生后,创建一个线程来运行 sigev_notify_function 进行通知。 sigev_value 将作为参数传入函数中。线程的属性由 sigev_notify_attributes 指定。如果 sigev_notify_attributes 为NULL,则线程属性与设置了 PTHREAD_CREATE_DETACHED 属性的线程一样,也就是说如果不指定属性,那么默认状态下,线程创建后就会分离。
posted @ 2020-11-29 21:01  Sigmun  阅读(222)  评论(0)    收藏  举报