考虑到这是我的代码:
public void alarmClockTick()
{
while(true){
foreach(Alarm alarm in objectCollection){
//Do some actions
}
Thread.Sleep(1000);
}
}
如果我们假设 for 循环执行某些可能需要几毫秒的操作,我如何确保线程循环恰好在 1 秒后循环?我目前正在开发一个闹钟,我希望我的这部分代码具有精确性。
我想过测量循环所需的时间,然后计算我们需要等待的时间,但是,时间测量也需要一些时间?
我将如何解决这个问题?
最佳答案
问题是 Windows 不是实时的。如果你使用计时器,你会在一秒钟后收到信号,但可能会有一些延迟。
处理它的最好方法是接受它并补偿它。那是: 存储时钟的开始时间。设置一个计时器一秒钟。每一秒之后设置一个新的计时器,但不是再次设置它,而是计算你在前一秒丢失的毫秒数,并将计时器设置为更正的值。继续使用此计算的原始开始时间,不要更新它,因为这样做可能会引入另一个偏差。只需根据原始开始时间计算修正即可。
如果有一个非常繁重的进程正在运行,您甚至可能需要不时地停下来。
关于c# - 确保线程恰好在一秒钟内滴答作响的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32013509/