我正在研究一个应用程序,我需要根据用户设置的时间安排任务。用户可以添加/修改/删除时间表。为了实现它,我正在考虑使用定时器队列。最初我虽然使用WaitableTimers套件非常符合我的目的,但我不能让我的线程睡觉竞争APC。使用计时器队列的计划程序
现在与定时器队列我不知道如何设置定时器信号基于系统时间。我试着下面的代码,但回调函数没有被调用
SYSTEMTIME st, lt;
GetSystemTime(&st);
FILETIME ft;
SystemTimeToFileTime(&st, &ft);
ULONGLONG qwResult;
// Copy the time into a quadword.
qwResult = (((ULONGLONG) ft.dwHighDateTime) << 32) + ft.dwLowDateTime;
// Add 20 seconds days.
qwResult += 20 * _SECOND;
HANDLE hTimerQueue = CreateTimerQueue();
HANDLE hTimer;
// Set a timer to call the timer routine in 10 seconds.
if (!CreateTimerQueueTimer(&hTimer, hTimerQueue ,(WAITORTIMERCALLBACK)TimerAPCProc, NULL , qwResult, 0, 0))
{
printf("CreateTimerQueueTimer failed (%d)\n", GetLastError());
return 3;
}
我将有许多这样的队列,所以我不能够负担得起一个线程为每个队列。这种方法背后的想法,我应该能够调用一个函数,当用户设置的时间到期 – Jeeva
那么你不必为每个函数创建一个线程,但我不认为计划一个计时器运行在12小时是一个好主意, imho你应该创建一个线程来不断监视任务列表并创建类似于线程池的任务,以在有限数量的线程上执行任务,如果没有线程可用,则您的任务将不得不等待 – Djole