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

在C中每x秒执行一次方法,第1张

概述是否有一个工作计时器的例子,它使用C每x秒执行一些函数.我很欣赏一个工作代码示例.最佳答案你可以产生一个新的线程:void *threadproc(void *arg) { while(!done) { sleep(delay_in_seconds); call_function(); } re

是否有一个工作计时器的例子,它使用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秒执行一次方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047869.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存