用C定义时间间隔

时间:2013-04-04 15:10:46

标签: c time

我想用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

以及其他问题我如何定义适用于时间的循环?

2 个答案:

答案 0 :(得分:2)

如果你可以提供帮助,请不要在这种情况下使用==。你正在为自己做好准备。如果出于某种原因代码被延迟并且你没有在20岁时死掉它,那么你就搞砸了,你永远不会完成任务。

你应该“假设一个小姐”,并且这样做:

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

是的,采用next-current并除以CLOCKS_PER_SEC可以获得使用的cpu时间。注意我说使用的CPU时间因为clock()没有报告花费的时间,所以如果您在sleep()代码中使用//doing some tasks次调用,则不会准确。否则,此代码应该足够接近您要执行的操作。

答案 1 :(得分:0)

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

while (1) {
  /* packet handling.. */
  sleep(20);
  some_task();
}