🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#518
Author: Paul Kaluza
Date: Wed, 04 Oct 1995 15:46
23 lines
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
#527
Author: Karl-Heinz Krause
Date: Thu, 05 Oct 1995 17:04
58 lines
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
#530
Author: Wilfried Teiken
Date: Fri, 06 Oct 1995 19:26
18 lines
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