是否有一个工作计时器的例子,它使用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 signalstruct sigaction act;act.sa_handler = &on_alarm;act.sa_mask = 0;act.sa_flags = SA_RESTART; // Restart interrupted system callssigaction(SIgalRM,&act,NulL);alarm(delay_in_seconds); // Setup initial alarm
当然,这两种方法都存在这样的问题,即您定期调用的函数需要是线程安全的.
信号方法特别危险,因为它也必须是异步安全的,这很难做到 – 即使是像printf这样简单的东西也不安全因为printf可能会分配内存,如果SIgalRM中断了对malloc的调用,你就是陷入困境,因为malloc不可重入.所以我不建议使用signal方法,除非你所做的只是在信号处理程序中设置一个标志,后来由其他一些函数检查,这会让你回到与线程版本相同的位置.
总结以上是内存溢出为你收集整理的在C中每x秒执行一次方法全部内容,希望文章能够帮你解决在C中每x秒执行一次方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)