static LIST_ENTRY TimersListHead;
static LONG TimeLast = 0;
-#define MAX_ELAPSE_TIME 0x7FFFFFFF
-
/* Windows 2000 has room for 32768 window-less timers */
#define NUM_WINDOW_LESS_TIMERS 32768
#if 0
/* Windows NT/2k/XP behaviour */
- if (Elapse > MAX_ELAPSE_TIME)
+ if (Elapse > USER_TIMER_MAXIMUM)
{
TRACE("Adjusting uElapse\n");
Elapse = 1;
}
#else
/* Windows XP SP2 and Windows Server 2003 behaviour */
- if (Elapse > MAX_ELAPSE_TIME)
+ if (Elapse > USER_TIMER_MAXIMUM)
{
TRACE("Adjusting uElapse\n");
- Elapse = MAX_ELAPSE_TIME;
+ Elapse = USER_TIMER_MAXIMUM;
}
#endif
/* Windows 2k/XP and Windows Server 2003 SP1 behaviour */
- if (Elapse < 10)
+ if (Elapse < USER_TIMER_MINIMUM)
{
TRACE("Adjusting uElapse\n");
- Elapse = 10; // 1024hz .9765625 ms, set to 10.0 ms (+/-)1 ms
+ Elapse = USER_TIMER_MINIMUM; // 1024hz .9765625 ms, set to 10.0 ms (+/-)1 ms
}
/* Passing an IDEvent of 0 and the SetTimer returns 1.
Msg.wParam = (WPARAM) pTmr->nID;
Msg.lParam = (LPARAM) pTmr->pfn;
- MsqPostMessage(pti, &Msg, FALSE, QS_TIMER, 0);
+ MsqPostMessage(pti, &Msg, FALSE, (QS_POSTMESSAGE|QS_ALLPOSTMESSAGE), 0);
pTmr->flags &= ~TMRF_READY;
- pti->cTimersReady++;
+ ClearMsgBitsMask(pti, QS_TIMER);
Hit = TRUE;
// Now move this entry to the end of the list so it will not be
// called again in the next msg loop.
{
pTmr->flags |= TMRF_READY; // Set timer ready to be ran.
// Set thread message queue for this timer.
- if (pTmr->pti->MessageQueue)
+ if (pTmr->pti)
{ // Wakeup thread
+ pTmr->pti->cTimersReady++;
ASSERT(pTmr->pti->pEventQueueServer != NULL);
- KeSetEvent(pTmr->pti->pEventQueueServer, IO_NO_INCREMENT, FALSE);
+ MsqWakeQueue(pTmr->pti, QS_TIMER, TRUE);
}
}
}