【C/C++】Linux系统周期回调函数

Linux系统中,周期回调函数是指在一定时间间隔内定期执行的函数。这些函数通常用于实现定时任务、周期性事件处理或者周期性数据采集等功能。

Linux系统提供了多种方式来实现周期回调函数,下面介绍几种常用的方法:

定时器:Linux内核提供了定时器机制,通过设置定时器可以实现周期回调函数。定时器可以采用两种方式:硬件定时器和软件定时器。硬件定时器通过设置计时器硬件来触发定时中断,而软件定时器则是通过在内核中使用定时器API来实现的。开发者可以根据需求选择适合的方式。

信号:Linux系统中可以使用信号机制来实现周期回调函数。开发者可以使用定时器信号(如SIGALRM)来触发周期性事件,并在信号处理函数中执行相应的操作。

定时器线程:开发者可以创建一个单独的线程来实现周期回调函数。在该线程中,可以使用定时器或者循环延时等方式来实现周期性执行。

定时任务调度器:Linux系统中也提供了一些定时任务调度器,如crontab等。开发者可以使用这些调度器来设置周期任务,实现周期回调函数。

无论使用哪种方式实现周期回调函数,都需要注意处理函数的执行时间,以免对系统性能造成影响。此外,还需要考虑并发访问的线程安全性,避免竞态条件的发生。

以下为定时器方式周期回调函数:

#include <time.h> 
#include <signal.h>
#include <sys/time.h>
#include <stdio.h>
  void timer_callback_fusion(union sigval v)
  {
        struct timeval time;
        unsigned long long StartTime= 0;
        unsigned long long EndTime= 0;
        gettimeofday(&time,NULL);
        StartTime = ((time.tv_sec*1000000+time.tv_usec));/*unit us*/
        printf("%lld\n",StartTime);
  }
   
  int main()
  {
      timer_t timer;
      struct sigevent se;
      struct itimerspec its;
      int ret = 0;
   
      // Set up signal event
      se.sigev_notify = SIGEV_THREAD;
      se.sigev_value.sival_ptr = &timer;
      se._sigev_un._sigev_thread._function = (void*)timer_callback_fusion;
      se._sigev_un._sigev_thread._attribute = NULL;
   
      // Create the timer
      ret = timer_create(CLOCK_REALTIME, &se, &timer);
      if( ret  == 0)   
        printf("timer_create ok\n"); 
   
      // Set the timer to expire after 30ms
      its.it_value.tv_sec = 0;
      its.it_value.tv_nsec = 50000000;//ns  <<-------调用回调函数的间隔时间,当前为50ms
      its.it_interval.tv_sec = its.it_value.tv_sec;
      its.it_interval.tv_nsec = its.it_value.tv_nsec;
   
      // Start the timer
      ret = timer_settime(timer, 0, &its, NULL);
      if( ret ==0)   
        printf("timer_settime ok\n"); 
      while(1){}
      return 0;
 }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HIT_Vanni

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值