在 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 分钟的主要内容,如果未能解决你的问题,请参考以下文章