|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Modula bietet die Möglichkeit von quasi parallel ablaufenden Co-Routinen, vergleichbar mit kooperativem Multitasking. Für jede Co-Routine muß eine Variable vom Typ PROCESS deklariert werden, die beim Umschalten den aktuellen Zustand speichert.
Ein neuer Prozeß wird mittels NEWPROCESS angelegt und bekommt als Parameter die Prozedur, die den Prozeß bildet, einen Speicherbereich der für die Daten verwendet werden kann, die Größe des Speicherbereichs und die dazu gehörende Variable vom Typ PROPCESS. In dem Beispiel unten muß für das Hauptprogramm kein neuer Prozeß angelegt werden, da dieser Prozeß schon läuft. Der Prozeß ist beendet, wenn die Prozedur beendet ist.
Zwischen den Co-Routinen wird mit der Prozedur TRANSFER umgeschaltet. Der erste Parameter dient dazu, den aktuellen Prozeßzustand zu speichern, der zweite ist der Prozeß, zu dem umgeschaltet werden soll.
Bsp.:
MODULE CoRoutinen; FROM SYSTEM IMPORT ADR; FROM Process IMPORT PROCESS, NEWPROCESS, TRANSFER; FROM InOut IMPORT WriteInt, WriteLn; VAR Ko1, Ko2, Msin : PROCESS; Zu1, Zu2 : ARRAY[0..1000] OF INTEGER; PROCEDURE K1; VAR i : INTEGER; BEGIN i := -1; LOOP i := i + 1; IF i>100 THEN TRANSFER(Ko1,Main); END; WriteInt(i,5); WriteLn; TRANSFER(Ko1,Ko2); END; END K1; PROCEDURE K2; VAR i : INTEGER; BEGIN i := 1001; LOOP i := i - 1; WriteInt(i,5); WriteLn; TRANSFER(Ko2,Ko1); END; END K2; BEGIN NEWPROCESS(K1,ADR(Zu1),SIZE(Zu1),Ko1); NEWPROCESS(K2,ADR(Zu2),SIZE(Zu2),Ko2); TRANSFER(Main,Ko1); END CoRoutinen.
English version not yet available. |