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

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

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

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

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

  1. void *threadproc(void *arg)
  2. {
  3. while(!done)
  4. {
  5. sleep(delay_in_seconds);
  6. call_function();
  7. }
  8. return 0;
  9. }
  10. ...
  11. pthread_t tid;
  12. pthread_create(&tid,NULL,&threadproc,NULL);

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

  1. void on_alarm(int signum)
  2. {
  3. call_function();
  4. if(!done)
  5. alarm(delay_in_seconds); // Reschedule alarm
  6. }
  7. ...
  8. // Setup on_alarm as a signal handler for the SIGALRM signal
  9. struct sigaction act;
  10. act.sa_handler = &on_alarm;
  11. act.sa_mask = 0;
  12. act.sa_flags = SA_RESTART; // Restart interrupted system calls
  13. sigaction(SIGALRM,&act,NULL);
  14. alarm(delay_in_seconds); // Setup initial alarm

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

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

猜你在找的Linux相关文章