C 等待定时器重置周期
我有一个可等待的计时器,重置时间为24小时。然而,计时器将被延迟约30分钟,每天它一直在运行。所以我想知道是什么原因造成的。我使用的是ofC 等待定时器重置周期,c,winapi,C,Winapi,我有一个可等待的计时器,重置时间为24小时。然而,计时器将被延迟约30分钟,每天它一直在运行。所以我想知道是什么原因造成的。我使用的是ofSetWaitableTimer,它指定了以毫秒为单位的时间。这是我用来设置计时器的代码 int SetTimr(LARGE_INTEGER* fire, node* cursor, LONG reset) { // Create an unnamed waitable timer. cursor->hTimer = CreateWait
SetWaitableTimer
,它指定了以毫秒为单位的时间。这是我用来设置计时器的代码
int SetTimr(LARGE_INTEGER* fire, node* cursor, LONG reset)
{
// Create an unnamed waitable timer.
cursor->hTimer = CreateWaitableTimer(NULL, false, NULL);
if (cursor->hTimer == NULL)
{
printf("CreateWaitableTimer failed (%d)\n", GetLastError());
return 1;
}
// Set a timer to wait for N seconds.
if (!SetWaitableTimer(cursor->hTimer, fire, reset, NULL, NULL, true))
{
printf("SetWaitableTimer failed (%d)\n", GetLastError());
return 1;
}
return 0;
}
fire
是指它应该发出信号的时间,而这个信号从来没有出现过问题
reset
是计时器再次启动的时间,设置为
不变的
#定义86400000天
,我知道这正好是24小时
我每250毫秒检查一次计时器,这对延迟不会有这么大的影响。所以我想知道是否有人对我如何使用计时器有任何想法。我意识到我可以为所需的时间重新设置计时器,但我不明白为什么不能正常工作。用户空间计时器是通用计时器,因此不能保证“超级精确”。只有真正保证计时器在触发之前至少会等待指定的时间间隔 一个可能的实现可能是让“主”计时器每毫秒关闭一次,并增加所有“从”计时器计数器。当计时器计数器达到指定的间隔时间时,它将触发事件。根据“主”计时器的配置,两次触发之间的时间可能略长于一毫秒(在您的情况下,可能会延长几微秒)。这种轻微的延迟加在一起,导致24小时计时器出现3分钟的漂移
在您的情况下,由于您希望在事件之间等待一整天,因此最好定期查询系统时间,或使用。
根据“主”计时器的配置,触发器之间的间隔可能略长于一毫秒(在您的情况下,长几微秒)。这种轻微的延迟加起来,导致24小时计时器漂移3分钟。
不过我没有使用主计时器,它是一个24小时重置周期漂移3分钟左右的单个计时器。@user3785768“主”计时器我指的是内核实现的直接响应毫秒间隔的东西。这不是你能控制的。哦,我明白了。这就解释了延迟的原因。我来看看你建议的方法。谢谢你的帮助,MSDN和这个问题有什么关系?如果你想让定时器每天都在同一时间关掉,考虑把它设置到那个特定的时间(每天),而不是使用一个周期。