我试图在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从未被称为..
有帮助吗?
您可以找到这个有用的:http://msdn.microsoft.com/en-us/library/ms686289(v = vs.85).aspx
引用:
pDueTime [IN]:时间之后将定时器的状态将被设置为有信号,在100个纳秒时间间隔.使用FILETIME结构描述的格式.正值表示绝对时间.请务必使用基于UTC的绝对时间,因为系统在内部使用基于UTC的时间. 负值表示相对时间.实际的计时器精度取决于硬件的功能.有关基于UTC的时间的更多信息,请参阅系统时间.
问题是你应该将SetWaitableTimer()传递给负值(意味着从现在起5秒),因为正值表示绝对时间.这是"从现在起两天"(相对)和"一月九日"(绝对)之间的区别.
| 归档时间: |
|
| 查看次数: |
3012 次 |
| 最近记录: |