我目前正试图找出查看X秒是否过去的最佳方法。我想到的基本实现如下:
wait_for = 5; // 5 seconds
ready_at = current_time() + wait_for; // might wrap around! :(
...
/* There is no sleep call; there will be processing happening. */
...
if (current_time() >= ready_at) // might also have wrapped around!
do_stuff()
非常简单,对吧?问题在于流程本身将会运行很长时间,虽然wait_for
时间相比之下会非常简短,但我担心current_time
会缠绕并且事件不会触发。出于显而易见的原因,这段代码很难测试。
所以我的问题是:
什么是最佳时间分辨率方法?我更喜欢posix中的东西,但Linux兼容性足够好。十分之一秒的分辨率足够好了。 (也就是说,在特别糟糕的情况下,检查可能不会超过一个小时!)
如何正确处理两者的时间环绕 a)ready_at的计算,和 b)检查它是否准备好了?
提前点燃do_stuff()
并非真正的选择。
我很清楚这个的逻辑本身不应该太难,但我在这个问题上推理自己。我的心灵根本不会与我合作。