Thread View: de.comp.lang.c++
3 messages
3 total messages
Started by Paul Kaluza
Wed, 04 Oct 1995 15:46
Abbruchdialog BC++ f. Windows
Author: Paul Kaluza
Date: Wed, 04 Oct 1995 15:46
Date: Wed, 04 Oct 1995 15:46
23 lines
1064 bytes
1064 bytes
Hallo! Wer kann helfen? Wie koennen bei einem nicht-modalen Dialog die Mauseingaben abgefragt werden, wenn ein Rechenvorgang ausgefuehrt wird? (Beispiel: Compilierungsdialog BC - Abfrage der ABBRUCH-Taste waehrend der Compilierung). Danke fuer alle Hinweise! Ciao Paul -- -------------------------------------------------------------------- Paul Kaluza Tel. : +43-1-58801-3651 Technische Universitaet Wien Fax : +43-1-5041105 Inst. fuer Elektrische Anlagen email: kaluza@eeaas1.tuwien.ac.at A-1040 Wien, Gusshausstr. 25/373 --------------------------------------------------------------------
Re: Abbruchdialog BC++ f. Windows
Author: Karl-Heinz Krause
Date: Thu, 05 Oct 1995 17:04
Date: Thu, 05 Oct 1995 17:04
58 lines
2555 bytes
2555 bytes
Am 4. Okt. 1995 schrieb Paul Kaluza (kaluza@eeaas1.tuwien.ac.at):
>Hallo!
>Wer kann helfen?
>Wie koennen bei einem nicht-modalen Dialog
>die Mauseingaben abgefragt werden, wenn
>ein Rechenvorgang ausgefuehrt wird?
>(Beispiel: Compilierungsdialog BC -
>Abfrage der ABBRUCH-Taste waehrend der
>Compilierung).
Man muß dafür sorgen, daß regelmäßig GetMessage oder PeekMessage
aufgerufen wird, um die Mausbotschaften abzuholen. Wie das genau
geschieht, hängt einmal davon ab, welche Windows-Verson benutzt wird,
und einmal davon, wie der Rechenvorgang gestartet wird. Erfolgt der
Start durch einen Prozeduraufruf oder läuft die Berechnung in einem
eigenen Programm, das mit WinExec o. ä. gestartet wird?
1. Windows95 oder Windows NT
1.1. Rechenvorgang in eigenem Programm
In diesem Fall muß, wegen des preemptiven Multitaskings, nichts
weiter unternommen werden.
1.2. Rechenvorgang in einer Prozedur
In diesem Fall reicht es aus, die Berechnung in einem eigenen Thread
laufen zu lassen.
2. Windows 3.x
2.1. Rechenvorgang in eigenem Programm
In diesem Fall wäre es günstig, wenn das Programm in einer eigenen
virtuellen Maschine läuft, da in diesem Fall auch Windows 3.x pre-
emptives Multitasking macht. Da Windows aber nur für DOS-Programme
eine neue VM startet, sollte man das Rechenprogramm mit dem DOS-
Power-Pack als Protected-Mode-DOS-Anwendung schreiben.
2.2. Rechenvorgang in einer Prozedur
In diesem Fall bleibt einem leider nichts anderes übrig, als in der
Berechnungsprozedur regelmäßige Aufrufe von PeekMessage vorzusehen
und evtl. ankommende Botschaften zu bearbeiten. Ein Compiler z. B.
könnte so geschrieben werden, daß er jeweils am Zeilenende auf ein-
kommende Botschaften prüft:
if ( (c = getchar()) == '\n' ) {
if (PeekMessage (&msg, 0, 0, 0, PM_REMOVE)) {
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
So ähnlich müßte die Berechnungsprozedur auch vorgehen.
Karl-Heinz Krause
Re: Abbruchdialog BC++ f. Windows
Author: Wilfried Teiken
Date: Fri, 06 Oct 1995 19:26
Date: Fri, 06 Oct 1995 19:26
18 lines
1327 bytes
1327 bytes
: Wie koennen bei einem nicht-modalen Dialog : die Mauseingaben abgefragt werden, wenn : ein Rechenvorgang ausgefuehrt wird? : (Beispiel: Compilierungsdialog BC - : Abfrage der ABBRUCH-Taste waehrend der : Compilierung). Waehrend des Rechenvorganges DoEvents aufrufen (wie genau das Ding heisst, das weiss ich nicht mehr. Es ist eine Funktion, die die Event-Queue von Windows abarbeiten laesst, so dass dein Buttonclick bemerkt wird), natuerlich irgenwo in einer Schleife, d.h. desoefteren. Dein Code, der auf den Buttonclick reagiert, setzt ein globales Flag, das wiederum vom Code der Routine abgefragt wird, und sich diese dann selbst den garaus macht. Vorsicht ist dabei angesagt, denn man kann sich leicht eine Reentranzsituation bauen, die nicht immer sauber verkraftet wird, wenn man nicht damit rechnet, neu aufgerufen zu werden. munter bleiben... Wilfried
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads