在C中每x秒执行一次方法

前端之家收集整理的这篇文章主要介绍了在C中每x秒执行一次方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

是否有一个工作计时器的例子,它使用C每x秒执行一些函数.

我很欣赏一个工作代码示例.

最佳答案
你可以产生一个新的线程:

void *threadproc(void *arg)
{
    while(!done)
    {
        sleep(delay_in_seconds);
        call_function();
    }
    return 0;
}
...
pthread_t tid;
pthread_create(&tid,NULL,&threadproc,NULL);

或者,您可以使用alarm(2)setitimer(2)设置警报:

void on_alarm(int signum)
{
    call_function();
    if(!done)
        alarm(delay_in_seconds);  // Reschedule alarm
}
...
// Setup on_alarm as a signal handler for the SIGALRM signal
struct sigaction act;
act.sa_handler = &on_alarm;
act.sa_mask = 0;
act.sa_flags = SA_RESTART;  // Restart interrupted system calls
sigaction(SIGALRM,&act,NULL);

alarm(delay_in_seconds);  // Setup initial alarm

当然,这两种方法都存在这样的问题,即您定期调用函数需要是线程安全的.

信号方法特别危险,因为它也必须是异步安全的,这很难做到 – 即使是像printf这样简单的东西也不安全因为printf可能会分配内存,如果SIGALRM中断了对malloc的调用,你就是陷入困境,因为malloc不可重入.所以我不建议使用signal方法,除非你所做的只是在信号处理程序中设置一个标志,后来由其他一些函数检查,这会让你回到与线程版本相同的位置.

猜你在找的Linux相关文章