#include <time.h>
#include <signal.h>
#include<stdio.h>
#include<stdlib.h>
#include <unistd.h>
#include <string.h>
void handle(union sigval v)
{
time_t t;
char p[32];
time(&t);
strftime(p, sizeof(p), "%T", localtime(&t));
printf("%s thread %lu, val = %d, signal captured.\n", p, pthread_self(), v.sival_int);
return;
}
void handlec(union sigval v) //定时器2产生信号时调用的处理函数
{
time_t t;
char p[32];
time(&t);
strftime(p, sizeof(p), "%T", localtime(&t));
printf("%s thread %lu, val = %d, signal captured.\n", p, pthread_self(), v.sival_int);
return;
}
int main()
{
struct sigevent evp,evc;
struct itimerspec ts,tsc;
timer_t timer,timerc;
int ret,retc;
/*----------------------定时器2---------------------------------------*/
memset (&evc, 0, sizeof (evc));
evc.sigev_value.sival_ptr = &timerc;
evc.sigev_notify = SIGEV_THREAD;
evc.sigev_notify_function = handlec;
evc.sigev_value.sival_int = 2; //作为handle()的参数
retc = timer_create(CLOCK_REALTIME, &evc, &timerc);
if( retc)
perror("timerc_create");
tsc.it_interval.tv_sec = 5;
tsc.it_interval.tv_nsec = 0;
tsc.it_value.tv_sec = 3;
tsc.it_value.tv_nsec = 0;
retc = timer_settime(timerc, TIMER_ABSTIME, &tsc, NULL);
if( retc )
perror("timerc_settime");
/*---------------------定时器4-------------------------------------*/
memset (&evp, 0, sizeof (evp));
evp.sigev_value.sival_ptr = &timer;
evp.sigev_notify = SIGEV_THREAD;
evp.sigev_notify_function = handle;
evp.sigev_value.sival_int = 4; //作为handle()的参数
ret = timer_create(CLOCK_REALTIME, &evp, &timer);
if( ret)
perror("timer_create");
ts.it_interval.tv_sec = 1;
ts.it_interval.tv_nsec = 0;
ts.it_value.tv_sec = 3;
ts.it_value.tv_nsec = 0;
ret = timer_settime(timer, TIMER_ABSTIME, &ts, NULL);
if( ret )
perror("timer_settime");
while(1);
}
#include <signal.h>
#include<stdio.h>
#include<stdlib.h>
#include <unistd.h>
#include <string.h>
void handle(union sigval v)
{
time_t t;
char p[32];
time(&t);
strftime(p, sizeof(p), "%T", localtime(&t));
printf("%s thread %lu, val = %d, signal captured.\n", p, pthread_self(), v.sival_int);
return;
}
void handlec(union sigval v) //定时器2产生信号时调用的处理函数
{
time_t t;
char p[32];
time(&t);
strftime(p, sizeof(p), "%T", localtime(&t));
printf("%s thread %lu, val = %d, signal captured.\n", p, pthread_self(), v.sival_int);
return;
}
int main()
{
struct sigevent evp,evc;
struct itimerspec ts,tsc;
timer_t timer,timerc;
int ret,retc;
/*----------------------定时器2---------------------------------------*/
memset (&evc, 0, sizeof (evc));
evc.sigev_value.sival_ptr = &timerc;
evc.sigev_notify = SIGEV_THREAD;
evc.sigev_notify_function = handlec;
evc.sigev_value.sival_int = 2; //作为handle()的参数
retc = timer_create(CLOCK_REALTIME, &evc, &timerc);
if( retc)
perror("timerc_create");
tsc.it_interval.tv_sec = 5;
tsc.it_interval.tv_nsec = 0;
tsc.it_value.tv_sec = 3;
tsc.it_value.tv_nsec = 0;
retc = timer_settime(timerc, TIMER_ABSTIME, &tsc, NULL);
if( retc )
perror("timerc_settime");
/*---------------------定时器4-------------------------------------*/
memset (&evp, 0, sizeof (evp));
evp.sigev_value.sival_ptr = &timer;
evp.sigev_notify = SIGEV_THREAD;
evp.sigev_notify_function = handle;
evp.sigev_value.sival_int = 4; //作为handle()的参数
ret = timer_create(CLOCK_REALTIME, &evp, &timer);
if( ret)
perror("timer_create");
ts.it_interval.tv_sec = 1;
ts.it_interval.tv_nsec = 0;
ts.it_value.tv_sec = 3;
ts.it_value.tv_nsec = 0;
ret = timer_settime(timer, TIMER_ABSTIME, &ts, NULL);
if( ret )
perror("timer_settime");
while(1);
}