关于每N秒如何做某事的技巧很多,但我没有发现任何明确说明任何这些方法是否由于延迟而缓慢地偏离与系统时钟同步的技巧。
我有一个在Windows上运行的多线程应用程序。我需要知道,在较高优先级的任务和线程允许的毫秒内,一个特定的线程将根据系统时钟在“精确”凌晨1点可靠执行,然后在1am + N秒,1am + 2N秒,依此类推。 ..并无限期地持续到11 pm、11pm + N,11pm + 2N等等。是的-无论如何,对我而言,每小时N个周期都是整数。
我完全希望线程执行的实际时间为1am + d1,1am + N + d2,1am + 2N + d3,...,其中每个d(i)是一些延迟增量。只要增量值的分布保持合理地一致且合理地低(通常最多为几十毫秒,并且在其之上出现极少的尖峰),这也很好。我不介意系统时钟与全局时间标准不同步。
为此,我可以使用什么时序结构?是否有某些东西可以保持同步本身,或者我是否必须编写一些代码,以便随着处理器负载在白天的上升和下降而不断调整自身以保持同步?
最佳答案
CreateWaitableTimer和SetWaitableTimer让您等待(WaitForSingleObject,完成端口或任何等待的对象),而不是休眠。
另外,您可以给它一个精确的绝对时间或相对时间,随便哪个。如果您想在1AM之后精确N秒,请给它绝对时间1 AM+N秒。
另外,如果您指定了休眠间隔,它甚至可以在计算机进入休眠状态时起作用。