一、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;
}