Informationen zu Timern
In diesem Thema wird beschrieben, wie Timer erstellt, identifiziert, festgelegt und gelöscht werden. Eine Anwendung verwendet einen Timer, um ein Ereignis für ein Fenster nach Ablauf einer bestimmten Zeit zu planen. Jedes Mal, wenn das angegebene Intervall (oder der Time out-Wert) für einen Timer verstreicht, benachrichtigt das System das dem Timer zugeordnete Fenster. Da die Genauigkeit eines Timers von der Systemuhrrate abhängt und wie oft die Anwendung Nachrichten aus der Nachrichtenwarteschlange abruft, ist der Time out-Wert nur ungefähr.
Das Thema enthält folgende Abschnitte:
Timervorgänge
Anwendungen erstellen Timer mithilfe der SetTimer-Funktion. Ein neuer Timer startet die Zeitliche Steuerung des Intervalls, sobald er erstellt wird. Eine Anwendung kann den Time out-Wert eines Timers mithilfe von SetTimer ändern und einen Timer mithilfe der KillTimer-Funktion zerstören. Um Systemressourcen effizient zu verwenden, sollten Anwendungen Timer zerstören, die nicht mehr benötigt werden.
Jeder Timer verfügt über einen eindeutigen Bezeichner. Beim Erstellen eines Timers kann eine Anwendung entweder einen Bezeichner angeben oder das System einen eindeutigen Wert erstellen lassen. Der erste Parameter einer WM _ TIMER-Nachricht enthält den Bezeichner des Timers, der die Nachricht gesendet hat.
Wenn Sie im Aufruf von SetTimerein Fensterhand handle angeben, ordnet die Anwendung den Timer diesem Fenster zu. Wenn der Time out-Wert für den Timer abgeht, übermittelt das System eine WM _ TIMER-Meldung an das Fenster, das dem Timer zugeordnet ist. Wenn im Aufruf von SetTimer kein Fensterhand handle angegeben ist, muss die Anwendung, die den Timer erstellt hat, die Nachrichtenwarteschlange auf WM _ TIMER-Nachrichten überwachen und an das entsprechende Fenster senden. Wenn Sie eine TimerProc-Rückruffunktion angeben, ruft die Standardfensterprozedur die Rückruffunktion auf, wenn sie WM _ TIMER verarbeitet. Daher müssen Sie Nachrichten im aufrufenden Thread senden, auch wenn Sie TimerProc anstelle der Verarbeitung von WM _ TIMER verwenden.
Wenn Sie benachrichtigt werden müssen, wenn ein Timer verstreicht, verwenden Sie einen wartebaren Timer. Weitere Informationen finden Sie unter Waitable Timer Objects.
High-Resolution Timer
Ein Zähler ist ein allgemeiner Begriff, der bei der Programmierung verwendet wird, um auf eine inkrementierende Variable zu verweisen. Einige Systeme enthalten einen leistungsindikator mit hoher Auflösung, der verstrichene Zeiten mit hoher Auflösung bietet.
Wenn auf dem System ein leistungsindikator mit hoher Auflösung vorhanden ist, können Sie die QueryPerformanceFrequency-Funktion verwenden, um die Häufigkeit in der Anzahl pro Sekunde auszudrücken. Der Wert der Anzahl ist prozessorabhängig. Bei einigen Prozessoren kann die Anzahl beispielsweise die Zyklusrate der Prozessoruhr sein.
Die QueryPerformanceCounter-Funktion ruft den aktuellen Wert des leistungsindikators mit hoher Auflösung ab. Indem diese Funktion am Anfang und Ende eines Codeabschnitts aufruft, verwendet eine Anwendung im Wesentlichen den Zähler als timer mit hoher Auflösung. Angenommen, QueryPerformanceFrequency gibt an, dass die Häufigkeit des leistungsindikators mit hoher Auflösung 50.000 Zähler pro Sekunde beträgt. Wenn die Anwendung QueryPerformanceCounter unmittelbar vor und unmittelbar nach dem Codeabschnitt aufruft, für den ein Timeding ausgeführt werden soll, können die Zählerwerte 1.500 bzw. 3.500 Zähler sein. Diese Werte geben an, dass 0,04 Sekunden (2.000 Zähler) verstrichen sind, während der Code ausgeführt wurde.
Wartebare Timerobjekte
Ein wartebares Timerobjekt ist ein Synchronisierungsobjekt, dessen Zustand auf signalisiert festgelegt ist, wenn die angegebene Fälligkeit eintrifft. Es gibt zwei Arten von wartebaren Timern, die erstellt werden können: manuelles Zurücksetzen und Synchronisierung. Ein Timer eines der beiden Typen kann auch ein periodischer Timer sein.
Ein Thread verwendet die CreateWaitableTimer- oder CreateWaitableTimerEx-Funktion, um ein Timerobjekt zu erstellen. Der erstellende Thread gibt an, ob der Timer ein Timer für die manuelle Zurücksetzung oder ein Synchronisierungszeit timer ist. Der erstellende Thread kann einen Namen für das Timerobjekt angeben. Threads in anderen Prozessen können ein Handle für einen vorhandenen Timer öffnen, indem sie ihren Namen in einem Aufruf der OpenWaitableTimer-Funktion angeben. Jeder Thread mit einem Handle für ein Timerobjekt kann eine der Wartefunktionen verwenden, um darauf zu warten, dass der Timerzustand auf signalisiert festgelegt wird.
Weitere Informationen zur Verwendung von wartebaren Timerobjekten für die Threadsynchronisierung finden Sie unter Waitable Timer Objects.