Nur alle 10ms Nachrichten an WndProc?
-
Ich habe mir gestern ein kleines Nachrichten-Protokoll-Programm gebaut, dass die Nachrichten registriert und in eine Datei schreibt. Dabei ist mir folgendes aufgefallen: Die WndProc bekommt nur alle 10ms Nachrichten.
Ist das tatsächlich so oder ist bloß die GetLocaleTime()-Funktion so ungenau? Wenn ja, warum ist das so?
MfG SideWinder
-
Nimm doch gleich time aus der MSG-Struktur (in der Main-Loop)
-
SideWinder schrieb:
Ist das tatsächlich so oder ist bloß die GetLocaleTime()-Funktion so ungenau? Wenn ja, warum ist das so?
Das hängt mit der Auflösung des System-Timers zusammen. Die Auflösung sollte sich mit GetSystemTimeAdjustment ermitteln lassen:
DWORD dwAdjustment, dwIncrement; BOOL bAdjustmentDisabled; GetSystemTimeAdjustment(&dwAdjustment, &dwIncrement, &bAdjustmentDisabled); TCHAR sz[256]; wsprintf(sz, TEXT("Aufloesung: %ums"), dwIncrement / 10000); MessageBox(NULL, sz, NULL, MB_ICONINFORMATION | MB_OK);
-
-King- schrieb:
SideWinder schrieb:
Ist das tatsächlich so oder ist bloß die GetLocaleTime()-Funktion so ungenau? Wenn ja, warum ist das so?
Das hängt mit der Auflösung des System-Timers zusammen. Die Auflösung sollte sich mit GetSystemTimeAdjustment ermitteln lassen:
DWORD dwAdjustment, dwIncrement; BOOL bAdjustmentDisabled; GetSystemTimeAdjustment(&dwAdjustment, &dwIncrement, &bAdjustmentDisabled); TCHAR sz[256]; wsprintf(sz, TEXT("Aufloesung: %ums"), dwIncrement / 10000); MessageBox(NULL, sz, NULL, MB_ICONINFORMATION | MB_OK);
Danke, werde das sofort einbauen :).
MfG SideWinder
-
Nochmal: Wozu fragst du extra nochmal die Zeit ab, wenn du sie doch schon (sogar richtiger) in der MSG-Struktur bekommst
-
flenders schrieb:
Nochmal: Wozu fragst du extra nochmal die Zeit ab, wenn du sie doch schon (sogar richtiger) in der MSG-Struktur bekommst
Er scheut den Aufwand, den es bedeutet, diese Zeit in die SYSTEMTIME-Struktur zu drücken?
-
Dann hätte er aber die richtige Zeit, wann die Nachricht eintraf - anders doch nur die, wann die Nachricht bearbeitet wurde
-
Ich glaube kaum, daß es hier um Genauigkeit geht. Insgesamt scheint mir das Experiment als solches im Vordergrund zu stehen. Die Frage ging wohl eher in die Richtung, wie diese "komischen" Zeiten zustande kommen (ich habe das jedenfalls so verstanden).
Aber Du hast natürlich recht. Wenn man die "echten" Zeiten haben will, muß man die MSG-Time nehmen (oder meinentwegen auch GetMessageTime()).
-
Mir gings eigentlich bloß darum zu erforschen welche Nachrichten ein Fenster so im Laufe seines Daseins bekommt :). Die Zeit habe ich einfach pro forma mitgeloggt.
Beim späteren Durchsehen der Logs ist mir eben aufgefallen, dass nur alle 10Ms Nachrichten kommen, dafür gleich an die 20.
MfG SideWinder