linux下signal与alarm函数实现定时器刷新

上篇博文:linux下setitimer定时器与定时器取消


存在一个问题:

使用 timer_settime() / timer_gettime() 是属于POSIX标准下的定时器函数,可以替代linux下的系统调用函数 settimer() / gettimer,因为这两个linux下的系统调用函数使用的是系统的真实时间,所以推测+实测,timer_settime() / timer_gettime() 也是系统真实时间。
系统真实时间,会决定一件事情,定时器开启后,只要线程不终止,到时间后一定会执行捆绑的handler(函数)。


解决办法:

使定时器可以刷新的方法,便是使用 signal 和 alarm 两个函数配合。

#include 
#include 
#include 

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 ...


你可能感兴趣的:(Linux/Unix)