À propos des minuteurs

Cette rubrique explique comment créer, identifier, définir et supprimer des minuteurs. Une application utilise un minuteur pour planifier un événement pour une fenêtre une fois qu’une heure spécifiée s’est écoulée. Chaque fois que l’intervalle spécifié (ou la valeur de délai d’attente) d’un minuteur s’écoule, le système signale la fenêtre associée au minuteur. Étant donné que la précision d’un minuteur dépend de la fréquence d’horloge du système et de la fréquence à laquelle l’application récupère les messages de la file d’attente des messages, la valeur de délai d’attente n’est que approximative.

Cette rubrique contient les sections suivantes.

Opérations du minuteur

Les applications créent des minuteurs en utilisant la fonction SetTimer. Un nouveau minuteur démarre le minutage de l’intervalle dès qu’il est créé. Une application peut modifier la valeur de délai d’expiration d’un minuteur en utilisant la fonction SetTimer et supprimer un minuteur en utilisant la fonction KillTimer. Pour utiliser efficacement les ressources du système, les applications doivent supprimer les minuteurs qui ne sont plus nécessaires.

Chaque minuteur dispose d’un identificateur unique. Lors de la création d’un minuteur, une application peut spécifier un identificateur ou avoir le système à créer une valeur unique. Le premier paramètre d’un message WM_TIMER contient l’identificateur du minuteur qui a publié le message.

Si vous spécifiez un handle de fenêtre dans l’appel à SetTimer, l’application associe le minuteur à cette fenêtre. Chaque fois que la valeur de délai d’attente du minuteur s’écoule, le système publie un message WM_TIMER dans la fenêtre associée au minuteur. Si aucun handle de fenêtre n’est spécifié dans l’appel à SetTimer, l’application qui a créé le minuteur doit surveiller sa file d’attente des messages WM_TIMER et les distribuer à la fenêtre appropriée.

Remarque

Si vous spécifiez la fonction facultative de rappel TIMERPROC , la fonction est appelée pendant la boucle de message et WM_TIMER n’est pas distribuée au rappel WNDPROC.

Si vous devez être averti lorsqu’un minuteur s’écoule, utilisez un minuteur d’attente. Pour plus d’informations, consultez Objets minuteur d’attente.

Minuteur de haute résolution

Un compteur est un terme utilisé de façon générale dans la programmation pour faire référence à une variable incrémentée. Certains systèmes incluent un compteur de performances de haute résolution qui fournit des temps écoulés à haute résolution.

Si un compteur de performances de haute résolution existe sur le système, vous pouvez utiliser la fonction QueryPerformanceFrequency pour exprimer la fréquence, en nombres par seconde. La valeur du nombre dépend du processeur. Sur certains processeurs, par exemple, le nombre peut être le taux de cycle de l’horloge du processeur.

La fonction QueryPerformanceCounter récupère la valeur actuelle du compteur de performances de haute résolution. En appelant cette fonction au début et à la fin d’une section de code, une application utilise essentiellement le compteur comme minuteur haute résolution. Par exemple, supposons que QueryPerformanceFrequency indique que la fréquence du compteur de performances de haute résolution est de 50 000 nombres par seconde. Si l’application appelle QueryPerformanceCounter immédiatement avant et après le délai d’expiration de la section du code, les valeurs du compteur peuvent être de 1500 nombres et 3500 nombres, respectivement. Ces valeurs indiquent que .04 secondes (2000 nombres) se sont écoulées pendant l’exécution du code.

Objets minuteur d’attente

Un objet minuteur d’attente est un objet de synchronisation dont l’état est défini sur « signalé » lorsque l’heure d’échéance spécifiée arrive. Il existe deux types de minuteurs pouvant être créés : la réinitialisation manuelle et la synchronisation. Un minuteur de l’un ou l’autre type peut également être un minuteur périodique.

Un thread utilise la fonction CreateWaitableTimer ou CreateWaitableTimerEx pour créer un objet minuteur. Le thread de création spécifie si le minuteur est un minuteur de réinitialisation manuelle ou un minuteur de synchronisation. Le thread de création peut spécifier un nom pour l’objet minuteur. Les threads d’autres processus peuvent ouvrir un handle à un minuteur existant en spécifiant son nom dans un appel à la fonction OpenWaitableTimer. Tout thread avec un handle vers un objet minuteur peut utiliser l’une des fonctions d’attente pour permettre d’attendre que l’état du minuteur soit défini sur « signalé ».

Pour plus d’informations sur l’utilisation d’objets de minuteur en attente pour la synchronisation de threads, consultez Objets minuteur d’attente.