#include
#include
#include
struct inn
{
int a;
int b;
};
void timer_func(union sigval lo_val)
{
printf("enter fun\r\n");
printf("a= %d\r\n", ((struct inn *)(lo_val.sival_ptr))->a);
printf("b= %d\r\n", ((struct inn *)(lo_val.sival_ptr))->b);
return;
}
int main(int argc, char *argv[])
{
timer_t my_timer;
struct sigevent my_sigev;
struct itimerspec old_spec;
struct itimerspec new_spec;
struct inn inst;
int Ret;
printf("enter\n");
inst.a = 3;
inst.b = 4;
my_sigev.sigev_notify = SIGEV_THREAD;
my_sigev.sigev_signo = SIGALRM;
my_sigev.sigev_value.sival_ptr = (void *)&inst; /*传递的参数*/
my_sigev.sigev_notify_function = timer_func;
my_sigev.sigev_notify_attributes = NULL;
Ret = timer_create(CLOCK_MONOTONIC, &my_sigev, &my_timer);
printf("timer = %d\n", (int)my_timer);
if(0 != Ret)
{
printf("timer create error\r\n");
return (-1);
}
new_spec.it_interval.tv_sec = 5;
new_spec.it_interval.tv_nsec = 0;
new_spec.it_value.tv_sec = 5;
new_spec.it_value.tv_nsec = 0;
Ret = timer_settime(my_timer, 0, &new_spec, &old_spec);
printf("Ret = %d\r\n", Ret);
printf(" %d\n", old_spec.it_interval.tv_sec);
printf("%d\n", old_spec.it_value.tv_sec);
if(0 != Ret)
{
printf("timer set1 error\r\n");
return (-1);
}
sleep(3);
Ret = timer_gettime(my_timer, &old_spec);
printf("%d\n", old_spec.it_interval.tv_sec);
printf("%d\n", old_spec.it_value.tv_sec);
pause();
return 0;
}
编译
[root@localhost exam]# gcc -o my_timer my_timer.c -lrt
[root@localhost exam]# ./my_timer
enter
timer = 135045272
Ret = 0
0
0
5
1
enter fun
a= 3
b= 4
enter fun
a= 3
b= 4
enter fun
a= 3
b= 4
enter fun
a= 3
b= 4
[root@localhost exam]# ./my_timer
enter
timer = 135045272
Ret = 0
0
0
5
1
enter fun
a= 3
b= 4
enter fun
a= 3
b= 4
enter fun
a= 3
b= 4
enter fun
a= 3
b= 4