Nächste Seite: DateConversions Aufwärts: Bibliotheksmoduln Vorherige Seite: Conversions

# Coroutines

Dieses Modul erlaubt die Handhabung von Coroutinen. Coroutinen unterscheiden sich dadurch von Prozeduren, dass sie nicht bei jedem Aufruf vom Startpunkt aus durchlaufen werden. Stattdessen kann eine Coroutine jederzeit (explizit) unterbrochen werden, und beim erneuten Eintritt in die Coroutine wird die der Unterbrechungs-Anweisung unmittelbar folgende Anweisung als nächste ausgeführt.

Coroutinen sind die Basis von quasi-parallel ablaufenden Prozessen. Im Gegensatz zu diesen ist für Coroutinen keine Unterstützung des Betriebssystems nötig. Echte Prozesse sind nur mit den Routinen der Schnittstellen-Moduln `ExecL` oder `DosL` möglich.

Prozedur `NEWPROCESS` ruft eine neue Coroutine ins Leben, wobei die Prozedur `p` die neue Coroutine bildet. Die Variablen `wsp` und `size` bezeichnen den zur Verfügung gestellten Arbeitsspeicher, erstere gibt die Adresse, letztere die Grösse des Arbeitsspeichers. Die Variable `new` charakterisiert die neu kreierte Coroutine. Die Coroutine wird nicht gestartet, sondern nur initialisiert. Danach kann jederzeit durch `TRANSFER` in die Coroutine gesprungen werden.

Der Arbeitsspeicher muss alle lokalen Variablen der Coroutine und der von ihr aufgerufenen Prozeduren beinhalten. Es können daher keine allgemeingültigen Werte für die optimale Grösse des Arbeitsspeichers angegeben werden.

Da innerhalb einer Coroutine Dos-Aufrufe möglich sind, muss sichergestellt werden, dass genügend Arbeitsspeicher angelegt wird. Für Dos-Aufrufe werden bis zu 1500 Byte benötigt. Falls keine Dos-Aufrufe in der Coroutine sind, können Sie diese Variablen auf kleinere Werte setzen. Die Variable `coroutinesMinStack` ist die minimale Grösse des Arbeitsspeichers, die bei `NEWPROCESS` erwartet wird. `coroutinesSaveStack` reserviert einen Bereich dieser Grösse im Arbeitsspeicher für nicht kontrollierbare Aufrufe (z.B. Dos). Sobald mehr als `size` - `coroutinesSaveStack` Byte des Arbeitsspeichers in Gebrauch sind, wird das Programm mit einem Stapelüberlauf abgebrochen.

`TRANSFER` suspendiert die durch `source` charakterisierte Coroutine, während mit `dest` an der Stelle der Suspension fortgefahren wird. Wird `source` wieder fortgesetzt, wird die unmittelbar auf `TRANSFER` folgende Anweisung ausgeführt.

Nächste Seite: DateConversions Aufwärts: Bibliotheksmoduln Vorherige Seite: Conversions