Article View: fras.text.programmieren
Article #40Re: Task-Fragen
From: Arno Eigenwillig
Date: Sat, 23 Sep 1995 09:21
Date: Sat, 23 Sep 1995 09:21
68 lines
3427 bytes
3427 bytes
Hallo! S.ZIMMERT@ame.osn.de (Steffen Zimmert) schrieb am 13.09.1995 in <wVz3gMD356aez2@p-zimmer.ame.osn.de>: > Hallo liebe Leute! Hallo lieber Steffen! Da du nicht zum ersten Mal hier im Netz was fragst, solltest du mittlerweile wissen, daß man seine Zeilenlänge auf *deutlich* unter 80 Zeichen einstellen und Blocksatz vermeiden sollte. > Die > in den Beispielen aufgeführten Funktionen sind alle vom Typ `void > function(void)`. Ist es vorgeschrieben, daß nur void-Funktionen zum > Einsatz kommen dürfen oder ist auch die Übergabe von Parametern nach > dem Motto `void function(LONG Type)` möglich? CreateTask() ist das egal. Du mußt es allerdings dann sinnvollerweise auch tatsächlich schaffen, deiner Funktion das Argument mitzugeben. Da AddTask() (welches von CreateTask() benutzt wird) alle Register außer dem PC (und höchstwahrscheinlich auch A7, auch wenn's im Autodoc anders steht) löscht, geht das nur über den Stack. Bei Verwendung von CreateTask() hast du aber keinen Zugriff auf den Stack. Daher mußt du AddTask() nehmen, denn das läßt das ausdrücklich zu (siehe Autodoc). [Ende des Child-Tasks signalisieren] > Oder kann mir jemand eine elegantere Lösung präsentieren? Dein Tochtertask könnte dem Muttertask einfach ein Signal geben (mit Signal()). Oder wenn du bei der Gelegenheit die Parameterübergabe zwischen beiden eleganter machen willst, kannst du es wie die Work- bench machen und dem Tochtertask zu Beginn eine Message zuschicken (wobei du bei reinen Tasks allerdings erstmal einen passenden Rendez- vous-Port finden mußt), die er dann am Ende mit ReplyMsg() zurück- schickt als "Fertig!"-Meldung. Beide Methoden sollten mit Forbid() geschützt werden, sodaß in etwa folgendes Ende herauskommt: Forbid(); /* Signal(), ReplyMsg(), o.ä. */ Wait(0); } Wait(0) kehrt nie zurück und ich ein sicherer Zustand, aus dem heraus der Task bedenkenlos geRemTask()t werden kann. > jede Bibliothek nochmal durch den Child-Task zu öffnen, um eine darin > enthaltene Funktion nutzen zu können? Ja. > Was passiert eigentlich, wenn der Child-Task während der Ausführung > hängen bleibt? Normalerweise kann man dann ja das Programm nicht > beenden.... Das ist dann eben Pech. :-) Aber das Problem hast du ja auch, wenn der Muttertask sich aufhängt. Man muß halt so programmieren, daß das nicht passiert. Gegen einzelne Fehlerquellen (z.B. Traps) kann man sich vielleicht schützen, aber auch nicht umfassend. (Was ist, wenn der Task mitten in OpenWindow() abstürzt und LockIBase() aktiv ist?!) -- __ __/// Arno Eigenwillig // <arno@yaps.rhein.de> \\ PGP key available \XX/ V+49-2225-5870 // <ARNO@BIGBEN.dssd.sub.org> \\ <Arnooo @ IRC> The i486 protection mode: It protects you from running DOS. [Bryan Butler]
Technical Details
Message-ID:
<wY$uwMD1BDaez2@arno.bigben.dssd.sub.org>Path:
arc1-ca.pugleaf.net!bigben.dssd.sub.org!ARNOReferences:
<wVz3gMD356aez2@p-zimmer.ame.osn.de>Show Full Headers
Complete Article Headers
Newsgroups: fras.text.programmieren,z-netz.rechner.amiga.programmieren Message-ID: <wY$uwMD1BDaez2@arno.bigben.dssd.sub.org> From: ARNO@bigben.dssd.sub.org (Arno Eigenwillig) Path: arc1-ca.pugleaf.net!bigben.dssd.sub.org!ARNO Organization: Yet Another Private Site in Meckenheim, Germany Subject: Re: Task-Fragen Date: Sat, 23 Sep 1995 11:21:04 +0200 X-Mailer: MicroDot 1.10 [REGISTERED 0001bd] References: <wVz3gMD356aez2@p-zimmer.ame.osn.de> X-Gateway: ZCONNECT UP royal.owl.de [UNIX/Connect v0.73] MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Z-Telefon: V+49-2225-5870