Timer oder Thread
-
Hallo,
ich hab mal ne allgemeine Frage zu Timern...
Wie funktioniert so ein Timer eigentlich? Wird der Code innerhalb eines Timers expilizit abgearbeitet und mein Programm "hängt" solange, oder aber ist ein Timer eigentlich wie ein Tread zu sehen, was ja bedeuten würde, dass mein restliches Programm normal weiter läuft, und die TimerFunktion zusätzlich abgearbeitet wird.Danke
Thomas
-
Eine Timer wird in Windows registriert. Windows sendet dann eine WM_TIMER an das programm.
Wenn dein Programm diese Nachricht abarbeitet dann fürt es den Code aus.
Danach wird die nächste Nachricht abgearbeitet.Sollte dein Programm in einer Schleife sein wird keine Nachricht abgeholt und somit auch der Timer-Code nicht ausgeführt.
Ist ungefährt so wie wenn du eine Button klickst nur das eben Windows den für dich klickt.
-
Ist fuer WM_TIMER ein Callback registriert, wird dieser synchron aufgerufen, und zwar von GetMessage(). D.h. GetMessage() prueft, ob eine WM_TIMER-Nachricht mit Callback in der Warteschlange des Threads ist, und fuehrt fuer diese eine Spezialbehandlung aus, wenn die Queue leer ist. Dasselbe gilt fuer WM_PAINT, die erst dann ausgefuehrt wird, wenn die Queue leer ist.
D.h. WM_TIMER ist auf keinen Fall mit einem Thread vergleichbar. Wie jeder Message-Handler sollte die Verarbeitung in WM_TIMER moeglichst kurz sein.
Es ist daher besser, fuer langwierige Verarbeitungen einen neuen Thread zu starten. Dies verhindert auch, dass die Oberflaeche eines Programms blockiert, wie Unix-Tom bereits erwaehnte.
Mehr zum Thema Warteschlangen in Windows gibt's in der Platform SDK Dokumentation im Kapitel ueber Window Management.