WM_TIMER Unterprogramm
-
Hey also ich habe ein Textfeld indem ich einen Wert eingeben möchte.
Aus diesem Wert wird berechnet wie lange es dauert bis ein Unterformular aufgerufen wird.
Er zählt auch sauber herunter. Nur sobald er mein Unterformular aufrufen soll, schmiert er komplett ab. Das kommt aber nur wenn ich das über den Timer mache.
Wenn ich das Formular durch klick auf "Start" öffne, dann geht es.
Ich habe kein Plan warum er das macht. In anderen Programmen klappt es wunderbar.void CRandomDlg::OnStart() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen UpdateData(true); //Hier stürzt er nicht ab //m_DialogErgebnis.DoModal(); Counter = m_Durchlaeufe * 10; SetTimer(1,5,NULL); } void CRandomDlg::OnTimer(UINT nIDEvent) { // TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen if(Counter == 0) { //Hier stürzt er ab m_DialogErgebnis.DoModal(); } Counter--; CDialog::OnTimer(nIDEvent); }Fehlermeldung: Die Ausnahme "unknown software exception" (80x800000003) ist in der Anwendung an der Stelle 0x7c911230 aufgetreten
-
Hmm, du könntest ja vielleicht mal versuchen, den Dialog nicht-modal aufzurufen (also einfach ShowWindow). Oder das Intervall 'raufzusetzen. Vielleicht ändert sich dann was. Ich habe keine Ahnung, warum es nicht funktioniert, aber ich könnte mir vorstellen, dass ein modaler Dialog in OnTimer nicht so günstig ist (auch wenn du dafür gesorgt hast, dass der Dialog nur einmal aufgerufen werden kann). Ist aber, wie gesagt, alles reine Spekulation.
Gruß Matze
-
hmm also ich habe echt keine Ahnung warum das nicht funktioniert. Aber ich habe das jetzt noch einmal mit einem anderen Interval getestet und jetzt sehe ich zumindest das er das Unterformular aufruft. Jedoch schmiert er immer noch mit der gleichen Meldung ab.
Es kann doch an sich nicht daran liegen, dass er die Variable weiter herunterzählt oder?
-
Hast du denn mal probiert, den Dialog nicht-modal aufzurufen (ShowWindow(SW_SHOW))?
Hast du mal einen Haltepunkt gesetzt und danach gesehen, ob DoModal nach dem ersten Aufruf eventuell nochmal aufgerufen wird? Das würde wohl bedeuten, dass Counter nochmal gegen Null läuft.
Was für eine Variable ist Counter denn eigentlich? Ein Member deiner Klasse? Oder eine globale Variable? Wo wird sie initialisiert und wo wird sie vielleicht noch verändert?
Versuche, mit Haltepunkten, schrittweiser Ausführung (F10, F11) und dem Callstack (Aufrufliste) herauszufinden, wo genau der Fehler produziert wird und welchen Wert die relevanten Variablen haben.
Gruß Matze
-
1. Dein Timer wird weiter ausgelöst und damit wird immer wieder ein neuer Dialog erzeugt. Ist das was Du möchtest?
2. Was sagt der Call Stack wenn es kracht.