说,我有以下C ++代码。
首先我创建一个手动等待计时器:
HANDLE hWTimer = CreateWaitableTimer(NULL, FALSE, NULL);
然后将其设置为将来触发一次的预定义时间(实际值由用户输入提供):
double fSeconds2Wait = 10000;
LARGE_INTEGER li;
//Convert to 100 nanosecond intervals (MUST BE NEGATIVE)
li.QuadPart = -10000000LL * (LONGLONG)fSeconds2Wait;
SetWaitableTimer(hWTimer, &li, 0, NULL, NULL, 0);
然后我有一个处于等待状态的工作线程,等待计时器触发:
WaitForSingleObject(hWTimer, INFINITE);
//Perform actions when timer fires
我有这样的问题,如果我想无限期地推迟'hWTimer'并有可能将其重置到另一个时间(根据用户请求),我该怎么做?
答案 0 :(得分:0)
来自MSDN文档
适用于SetWaitableTimer
计时器最初处于非活动状态。要激活计时器,请调用SetWaitableTimer。如果在调用SetWaitableTimer时计时器已处于活动状态,则计时器将停止,然后重新激活。以这种方式停止计时器不会将计时器状态设置为发信号,因此在计时器上的等待操作中被阻塞的线程仍然被阻止。但是,它确实取消了任何挂起的完成例程。
,对于CancelWaitableTimer
CancelWaitableTimer函数不会更改计时器的信号状态。它会在计时器设置为信号状态之前停止计时器并取消未完成的APC。因此,对定时器执行等待操作的线程保持等待,直到它们超时或重新激活定时器并且其状态被设置为发信号。如果计时器已经处于信号状态,它将保持该状态。
要重新激活计时器,请调用SetWaitableTimer函数。
因此,您可以通过调用CancelWaitableTimer来暂停您的计时器(和线程),并根据用户的请求,通过调用SetWaitableTimer重新启动它。