我想用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
以及其他问题我如何定义适用于时间的循环?
答案 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();
}