-1

我想在 C 中定义时间间隔。
例如,我想每 20 秒执行一次任务;下面的代码对这个任务是否正确?

澄清一下,我们的目标是与时间间隔一起工作。例如,我想每 20 秒读取一次数据包,并且在每个间隔结束时我想更改一些参数。

double blocktime = 20.000000;
clock_t current, next;

current = clock();
    while(trace_read_packet(trace,packet)> 0 ){
        //doing some tasks
        next = clock(); 
        if ((double((next - current) / CLOCKS_PER_SEC))== blocktime) // if it is end of the  interval do some tasks
        {
                          //doing some task
            current = next;

        }
    }//end of while

和其他问题我如何定义与时间一起工作的循环?

4

2 回答 2

2

当你可以帮助它时,永远不要==在这样的情况下使用。你正在为失败做准备。如果由于某种原因代码被延迟并且您没有在 20 时将其击中,那么您就完蛋了,您将永远无法完成任务。

您应该“假设错过”并这样做:

if ((double((next - current) / CLOCKS_PER_SEC))>= blocktime) 

是的,取下一个电流并除以 CLOCKS_PER_SEC 会给你使用 cpu 时间。注意我说CPU 时间使用是因为clock()不报告睡眠时间,所以如果你sleep()在代码中使用调用//doing some tasks,这将是不准确的。否则,此代码应该与您尝试执行的操作足够接近。

于 2013-04-04T15:21:55.787 回答
0

您的方法可能会使程序占用 100% 的 cpu 时间:程序将永久检查是否该运行some_task()。为什么不使用睡眠():

while (1) {
  /* packet handling.. */
  sleep(20);
  some_task();
}
于 2013-04-04T16:11:23.850 回答