如何在一秒钟内调用一个方法/函数50次,然后计算花费的时间,如果花费的时间少于1秒,则睡眠(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;
  }
}

我是新的定时器API。有谁能帮我看看什么是定时器api,我必须用它来实现这一点。我想要可移植的代码。

最佳答案

首先,阅读time(7)手册页。
然后您可能需要调用timer_create(2)来设置计时器。要查询时间,请使用clock_gettime(2)
您可能需要等待并多路传输一些输入和输出。poll(2)对此很有用。要在不使用CPU的情况下睡眠少量时间,请考虑nanosleep(2)
如果使用计时器执行信号,请读取signal(7)并小心,因为信号处理程序仅限于异步信号安全函数(请考虑使用仅设置一些全局volatile sig_atomic_t标志的信号处理程序)。您可能还对特定于Linux的timerfd_create(2)感兴趣(您可以poll或传递给事件循环)。
您可能需要使用一些现有的event loop库,如libeventlibev(或GTK/GLIB、QT等),它们经常使用poll(或更有趣的东西)。linux特有的eventfd(2)signalfd(2)可能非常有用。
Advanced Linux Programming对阅读也很有用。
如果send_msg正在进行网络I/O,您可能需要围绕某个事件循环(可能是您自己的,基于poll)重新设计程序-您需要在网络发送和网络接收上进行多路复用(即poll)。continuation-passing style是一个有用的范例。

关于c++ - 如何在一秒钟内调用方法/函数50次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19331261/

10-09 05:13
查看更多