C 等待定时器重置周期

C 等待定时器重置周期,c,winapi,C,Winapi,我有一个可等待的计时器,重置时间为24小时。然而,计时器将被延迟约30分钟,每天它一直在运行。所以我想知道是什么原因造成的。我使用的是ofSetWaitableTimer,它指定了以毫秒为单位的时间。这是我用来设置计时器的代码 int SetTimr(LARGE_INTEGER* fire, node* cursor, LONG reset) { // Create an unnamed waitable timer. cursor->hTimer = CreateWait

我有一个可等待的计时器,重置时间为24小时。然而,计时器将被延迟约30分钟,每天它一直在运行。所以我想知道是什么原因造成的。我使用的是of
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和这个问题有什么关系?如果你想让定时器每天都在同一时间关掉,考虑把它设置到那个特定的时间(每天),而不是使用一个周期。