一、SIGEV_SIGNAL通知方式
当时间到达时,发送一个信号
#include <stdio.h>
#include <time.h>
#include <signal.h>
#include <unistd.h>
void sigusr1_handler(int sig)
{
printf("%s---%d\n", __func__, __LINE__);
return ;
}
int main(void)
{
int ret;
timer_t timer_id;
struct sigevent sev;
struct itimerspec its;
signal(SIGUSR1, sigusr1_handler);
sev.sigev_notify = SIGEV_SIGNAL;
sev.sigev_signo = SIGUSR1;
sev.sigev_value.sival_ptr = &timer_id;
ret = timer_create(CLOCK_REALTIME, &sev, &timer_id);
its.it_value.tv_sec = 1;
its.it_value.tv_nsec = 0;
its.it_interval.tv_sec = 1;
its.it_interval.tv_nsec = 0;
timer_settime(timer_id, 0, &its, NULL);
sleep(2);
sleep(2);
return 0;
}
二、SIGEV_THREAD通知方式
当时间到达时,创建一个线程
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <signal.h>
void sigalrm_handler(int sig)
{
printf("%s---%d\n", __func__, __LINE__);
return ;
}
int main(int argc, char *argv[])
{
int ret;
timer_t timer_id;
struct sigevent sev;
struct itimerspec its;
memset(&sev, 0, sizeof(struct sigevent));
sev.sigev_notify = SIGEV_THREAD;
sev.sigev_notify_function = thread_start;
sev.sigev_value.sival_ptr = &timer_id;
sev.sigev_value.sival_int = 3;
ret = timer_create(CLOCK_REALTIME, &sev, &timer_id);
its.it_value.tv_sec = 1;
its.it_value.tv_nsec = 0;
its.it_interval.tv_sec = 1;
its.it_interval.tv_nsec = 0;
timer_settime(timer_id, TIMER_ABSTIME, &its, NULL);
sleep(10);
return 0;
}
本文介绍了Linux中两种定时器通知方式:SIGEV_SIGNAL和SIGEV_THREAD。对于SIGEV_SIGNAL,当时间到达时,程序会接收到SIGUSR1信号;而SIGEV_THREAD则会在时间到时创建一个线程执行指定函数。示例代码展示了如何设置和使用这两种通知机制。
4362

被折叠的 条评论
为什么被折叠?



