如何在一秒钟内调用方法/函数50次

时间:2013-10-12 06:25:45

标签: c++ c unix time timer

如何在一秒钟内调用方法/函数50次,然后计算花费的时间,如果花费的时间少于一秒,则睡眠时间为(1次)秒。

以下是伪代码

while(1)
{
  start_time = //find current time
  int msg_count=0;
  send_msg();
  msg_count++;

  // Check time after sending 50 messages
  if(msg_count%50 == 0)
  {
   curr_time = //Find current time
   int timeSpent = curr_time - start_time ;
   int waitingTime;

   start_time = curr_time ;

   waitingTime = if(start_time < 1 sec) ? (1 sec - timeSpent) : 0;
   wait for waitingTime; 
  }
}

我是Timer API的新手。谁能帮助我什么是计时器API,我必须用来实现这一点。我想要便携式代码。

1 个答案:

答案 0 :(得分:2)

首先,阅读time(7)手册页。

然后您可能需要致电timer_create(2)来设置计时器。要查询时间,请使用clock_gettime(2)

您可能想要等待并在某些输入和输出上进行多路复用。 poll(2)对此非常有用。要在不使用CPU的情况下休眠一小段时间,请考虑nanosleep(2)

如果使用定时器执行信号,请阅读signal(7)并小心,因为信号处理程序仅限于 async-signal-safe函数(考虑使用一个信号处理程序,它只设置一些全局timerfd_create(2) 1}}旗帜)。您可能也会对特定于Linux的event loop感兴趣(您可以volatile sig_atomic_t或传递给您的事件循环)。

您可能希望使用一些现有的libevent库,例如libeveventfd(2)(或来自GTK / Glib,Qt等的那些库),这些库经常使用{ {1}}(或更高级的东西)。特定于Linux的signalfd(2)Advanced Linux Programming可能非常有用。

continuation-passing style也很有用。

如果poll正在进行网络I / O,您可能需要围绕某个事件循环重新设计程序(可能是您自己的,基于poll) - 您需要多路复用(即{ {1}})网络发送和网络接收。 {{3}}是一个有用的范例。