Waitable Timer

Le Waitable Timer est apparu avec NT4, il n'est pas géré par 95 mais l'est par 98. Le Waitable Timer permet de synchroniser un Thread sur un timer, ex :

NumTimer = CreateWaitableTimer(NULL, 0, NULL); // création du timer

SetWaitableTimer(NumTimer,&next,periodems,NULL,NULL,0); // armement sur une période en ms

WaitForSingleObject(NumTimer,INFINITE); // mise en attente

La période indiquée en ms n'a en faite que la précision de l'it cyclique de Windows, par défaut à 10 ms. Si vous demander un temps de 1 ms, vous obtiendrez en fait 10ms, en demandant 11 ms, vous aurez 20 ms, etc...

Toutefois NT peut changer cette résolution, elle suit par exemple la résolution des multimédia timer après un appel de timeBeginPeriod. Si un multimédia timer existe à 1 ms, elle devient alors de 1 ms. Sous Windows 98 par contre, il semble que la résolution soit automatiquement adaptée et on observe pas d'arrondis même sans appeller timeBeginPeriod

Les activations ne semblent pas "exactement callées" sur l'horloge système provoquant une dérive lente (de l'ordre de 1/1000) par rapport à l'horloge système.

Prototypes :

bulletHANDLE CreateWaitableTimer(
LPSECURITY_ATTRIBUTES lpTimerAttributes,    // pointer to security attributes
BOOL bManualReset,    // flag for manual reset state
LPCTSTR lpTimerName    // pointer to timer object name
);   
bulletBOOL SetWaitableTimer(
HANDLE hTimer,    // handle to a timer object
const LARGE_INTEGER *pDueTime,    // when timer will become signaled
LONG lPeriod,    // periodic timer interval
PTIMERAPCROUTINE pfnCompletionRoutine,    // pointer to the completion routine
LPVOID lpArgToCompletionRoutine,    // data passed to the completion routine
BOOL fResume    // flag for resume state
);
bulletDWORD WaitForSingleObject(
HANDLE hHandle,    // handle of object to wait for
DWORD dwMilliseconds     // time-out interval in milliseconds
);
 

Accueil ] Remonter ]