在 for 循环中休眠,总迭代时间为 2 分钟
Posted
技术标签:
【中文标题】在 for 循环中休眠,总迭代时间为 2 分钟【英文标题】:sleep in for loop for total iteration time of 2 minutes 【发布时间】:2015-02-11 17:16:39 【问题描述】:我在 while (1) 中有一个 for 循环,我希望循环在每个整个 for 循环周期中平均大约 2 分钟。这需要根据迭代的执行时间和我的 2 分钟拍摄时钟中剩余的时间,在每次迭代之间休眠不同的时间。任何想法。
我正在走向某事
while(true)
unsigned long begin_loop = OCX::micro_stamp();
for (int i = 0; i < _vector.size(); i++)
unsigned long start = OCX::micro_stamp();
unsigned long avg = ( ( begin_loop - start) / ( i + 1 ) );
usleep ( ( 120000000 - ( (_vector.size() - i) * avg ) ) / ( _vector.size() - i ) );
try
catch
【问题讨论】:
创建一个事件对象并在每次循环迭代结束时等待它。 我计划在每次迭代结束时睡觉,但需要知道如何计算每次迭代结束时的睡眠时间背后的数学原理,因为它会有所不同。 睡眠时间类似于120 - (now - topOfLoopTime).TotalSeconds
。
这将导致第一次迭代休眠很长时间,而最后一次根本不休眠。
我正朝着类似上面的方向发展
【参考方案1】:
在每次迭代结束时,休眠
((120000000 - total elapsed microseconds) / (vector.size() - i))
【讨论】:
【参考方案2】:在每次迭代结束时,休眠 ((120 - 总经过时间) / (vector.size() - i))
【讨论】:
以上是关于在 for 循环中休眠,总迭代时间为 2 分钟的主要内容,如果未能解决你的问题,请参考以下文章
在 for 循环的某些迭代中,字符串的长度为 0,而在其他迭代中则为 0