Benutzer mit den meisten Antworten
KillTimer bei CDialog Objekten erforderlich?

Frage
-
Hallo Forum
Beim Versuch, einem neuen Kollegen die Funktionsweise von Window-Timern zu erklären bin ich auf eine uralte Frage gestoßen:
BOOL CxxDlg::OnInitDialog { .... SetTimer(TIMER_ID,500,NULL); ... } void CxxDlg::OnTimer(UINT nIDEvent) { ... CDialog::OnTimer(nIDEvent); }
Man weiß, dass diese Timer angeblich nicht allzu üppig gesät sind, und es die Funktion KillTimer() gibt. Die Frage, die sich nun stellt:
Gibt es in der CDialog Basisklasse einen Mechanismus, der automatisch alle zugewiesenen Timer wieder freigibt ("tötet") sobald der Dialog beendet wird, oder muss ich das selber machen?
Ich hab's meistens in die OnDestroy Funktion reingeschrieben, wenn's eine gegeben hat:
void CxxDlg::OnDestroy(void) { KillTimer(TIMER_ID); ... }
Muss ich das auf jeden Fall machen?
Grüße
FireHeart
- Typ geändert Robert BreitenhoferModerator Montag, 20. August 2012 14:30 Keine Rückmeldung des Fragenstellender
- Typ geändert Robert BreitenhoferModerator Mittwoch, 9. Januar 2013 17:31 Rückmeldung des Fragenstellender
Antworten
-
So ist es. KillTimer ist nicht (mehr) nötig.
http://msdn.microsoft.com/en-us/library/kt7c0708(v=vs.100).aspx
MSDN sagt zu DestroyWindow:
.. It also destroys the window's menu, flushes the application queue, destroys outstanding timers, removes Clipboard ownership, and breaks the Clipboard-viewer chain ..
In älteren BS und WinCE war es noch nötig, soweit ich mich erinnere.
- Als Antwort vorgeschlagen Martin RichterModerator Montag, 14. Januar 2013 09:35
- Als Antwort markiert Robert BreitenhoferModerator Montag, 14. Januar 2013 12:11
Alle Antworten
-
So ist es. KillTimer ist nicht (mehr) nötig.
http://msdn.microsoft.com/en-us/library/kt7c0708(v=vs.100).aspx
MSDN sagt zu DestroyWindow:
.. It also destroys the window's menu, flushes the application queue, destroys outstanding timers, removes Clipboard ownership, and breaks the Clipboard-viewer chain ..
In älteren BS und WinCE war es noch nötig, soweit ich mich erinnere.
- Als Antwort vorgeschlagen Martin RichterModerator Montag, 14. Januar 2013 09:35
- Als Antwort markiert Robert BreitenhoferModerator Montag, 14. Januar 2013 12:11
-
Die Einschränkung mit den Timern existiert mit 32 Bit Windows auf NT basierend in der Art nicht mehr. Wie das mit Win9x was weis ich nicht, das habe ich nie genauer beleuchtet.
Aber auch heute entferne ich Timer die ich nicht mehr benötigt mit KillTimer, auch wenn es nicht mehr unbedingt nötig ist. Es ist aber so, dass es nichts schadet, und je nach Anwendungsfall werden Timer ja auch noch während der existens eines Fensters nicht mehr benötigt, und daher ist KillTimer noch immer von mir gerne benutzt...
-
****************************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
****************************************************************************************************************Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo Robert
Sorry, dass ich mich jetzt eine Zeitlang nicht im Forum betätigt habe, aber aus irgendeinem Grund konnte ich mich nicht mehr einloggen. Jedesmal, wenn ich versuchte, dies zu tun, passierte beim Explorer einfach gar nix mehr...auch auf anderen Computern.
Heute hab ich's mal wieder probiert...und siehe da, es ging wieder :-)
Grüße
FireHeart
-
Hallo Robert
Sorry, dass ich mich jetzt eine Zeitlang nicht im Forum betätigt habe, aber aus irgendeinem Grund konnte ich mich nicht mehr einloggen. Jedesmal, wenn ich versuchte, dies zu tun, passierte beim Explorer einfach gar nix mehr...auch auf anderen Computern.
Heute hab ich's mal wieder probiert...und siehe da, es ging wieder :-)
Grüße
FireHeart
Hallo Fire-Heart,
Kein Problem, ich habe die Frage wieder aufgemacht.
Könntest Du Dein Problem inzwischen lösen? Wenn ja, es wäre schön, wenn Du posten würdest wie es funktioniert hat, denn dann profitieren unter Umständen andere mit dem gleichen Problem davon.
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hallo Fire-Heart,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.