linux下signal与alarm函数实现定时器刷新
上篇博文:linux下setitimer定时器与定时器取消存在一个问题:使用 timer_settime() / timer_gettime() 是属于POSIX标准下的定时器函数,可以替代linux下的系统调用函数 settimer() / gettimer,因为这两个linux下的系统调用函数使用的是系统的真实时间,所以推测+实测,timer_settime() / timer
·
存在一个问题:
使用 timer_settime() / timer_gettime() 是属于POSIX标准下的定时器函数,可以替代linux下的系统调用函数 settimer() / gettimer,因为这两个linux下的系统调用函数使用的是系统的真实时间,所以推测+实测,timer_settime() / timer_gettime() 也是系统真实时间。
系统真实时间,会决定一件事情,定时器开启后,只要线程不终止,到时间后一定会执行捆绑的handler(函数)。
解决办法:
使定时器可以刷新的方法,便是使用 signal 和 alarm 两个函数配合。
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
typedef void (*sighandler_t)(int);
void someone_func_handler(int param)
{
printf("hello\n");
}
int main(void)
{
int i;
sighandler_t handler = someone_func_handler;
signal(SIGALRM, handler);
alarm(5);
for(i = 1; i < 7; i++)
{
printf("sleep %d ...\n", i);
sleep(1);
}
return 0;
}
执行结果:
sleep 1 ...
sleep 2 ...
sleep 3 ...
sleep 4 ...
sleep 5 ...
hello
sleep 6 ...
更多推荐
已为社区贡献2条内容
所有评论(0)