C++中的Windows WaitableTimers

Bet*_*moo 2 c++ windows

我试图在C++中设置Windows等待计时器,如下所示:

#define _SECOND 10000000
void Run()
{
    __int64 qwDueTime= 5 * _SECOND;

    LARGE_INTEGER   liDueTime;
    // Copy the relative time into a LARGE_INTEGER.
    liDueTime.LowPart  = (DWORD) ( qwDueTime & 0xFFFFFFFF );
    liDueTime.HighPart = (LONG)  ( qwDueTime >> 32 );

    SetWaitableTimer(
          CreateWaitableTimer(NULL,FALSE  ,L"2004"),
             &liDueTime,2000,
             (PTIMERAPCROUTINE)TimerFinished,NULL,FALSE );
    cout<<"Second"<<endl;
}
Run Code Online (Sandbox Code Playgroud)

这里TimerFinished

VOID CALLBACK TimerFinished(
    LPVOID lpArg,               // Data value.
    DWORD dwTimerLowValue,      // Timer low value.
    DWORD dwTimerHighValue ) {  // Timer high value.

        cout<<"First"<<endl;
        cout.flush();
 }
Run Code Online (Sandbox Code Playgroud)

但不幸的是,TimerFinished从未被称为..

有帮助吗?

And*_*ent 7

您可以找到这个有用的:http://msdn.microsoft.com/en-us/library/ms686289(v = vs.85).aspx

引用:

pDueTime [IN]:时间之后将定时器的状态将被设置为有信号,在100个纳秒时间间隔.使用FILETIME结构描述的格式.正值表示绝对时间.请务必使用基于UTC的绝对时间,因为系统在内部使用基于UTC的时间. 负值表示相对时间.实际的计时器精度取决于硬件的功能.有关基于UTC的时间的更多信息,请参阅系统时间.

问题是你应该将SetWaitableTimer()传递给负值(意味着从现在起5秒),因为正值表示绝对时间.这是"从现在起两天"(相对)和"一月九日"(绝对)之间的区别.