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 属性的线程一样,也就是说如果不指定属性,那么默认状态下,线程创建后就会分离。

浙公网安备 33010602011771号