008
17.05.2003, 21:33 Uhr
Dirk22
|
Hallo Heiko,
vielen Dank für deine ausführliche Antwort. Ich habe jetzt für dieses Problem allerdings eine sehr leichte Lösung gefunden:
In den Header von Mainframe kommt:
in OnButtonStart() schreibe ich folgendes:
C++: |
StopClicked = false; MSG msg; //diese Strukur speichert Informationen über die Nachrichtenschlange ab
while(!StopClicked) { while(PeekMessage(&msg, NULL, 0,0,PM_NOREMOVE)) AfxGetApp()->PumpMessage(); //eigener Quellcode in dieser while-Schleife
}
|
Mit dem PeekMessage wird überprüft, ob sich Nachrichten in der Nachrichtenwarteschlange befinden. Diese werden dann mit dem PumpMessagebefehl abgearbeitet Befindet sich keine Nachricht mehr in der Nachrichtenwarteschlange, so wird der restliche Quellcode in dieser Schleife ausgeführt. Jeden Schleifendurchgang wird also am Anfang überprüft, ob es Nachrichten in der Nachrichtenwarteschlange gibt. Wenn ein Schleifendurchgang sehr lange dauern sollte kann man dieses PeekMessage und PumpMessage auch öfters unterbringen, damit öfters auf Nachrichten jeder Art geprüft und diese dann ausgeführt werden. Die Schleife wird also abgearbeitet, sobald Nachrichten eintreffen, wie z.B. der Klick auf einen Button, wird diese Nachricht ausgeführt, und dann anschliessend wieder an der Schleife weitergearbeitet.
mfg
Dirk
P.S.: Ich bin ab Morgen über eine Woche im Urlaub. |