|
|
|
|
Klasse Coroutine
Einordnung in die Gesamtstruktur
- Modul
- thread
- Basisklassen
- keine
- abgeleitete Klassen
- Entrant
- Erstellungszeitpunkt
- Aufgabe 4
- Dateien
coroutine.h coroutine.cc
Beschreibung
Die Klasse Coroutine stellt die Abstraktion einer Koroutine dar.
Sie ermöglicht die Prozessorabgabe an eine andere Koroutine und
stellt (durch die Struktur toc)
Speicherplatz zur Verfügung, um die Inhalte der
nicht-flüchtigen Register bis zur nächsten Aktivierung zu sichern.
Außerdem sorgt sie für die Initialisierung
dieser Registerwerte, damit bei der ersten Aktivierung die
Ausführung an der richtigen Stelle und mit dem richtigen Stack
beginnt.
öffentliche Methoden
Coroutine (void* tos);
- Im Coroutinen Konstruktor werden die Registerwerte so
initialisiert, dass der Stackpointer initial auf
tos zeigt und bei der ersten Aktivierung die
Ausführung mit der Funktion kickoff
beginnt, die den
this-Pointer des Coroutinenobjekts als Parameter auf dem Stack
vorfinden muss.
void go ();
- Diese Methode dient der ersten Aktivierung der ersten
Koroutine im System. Daher müssen hier
keine Registerwerte gerettet werden.
void resume (Coroutine& next);
- Mit dieser Methode wird ein Koroutinenwechsel
ausgelöst. Die aktuelle Belegung der nicht-flüchtigen
Register wird in dem toc Element gesichert und durch die Werte
von next (dem toc Element der nächsten
Koroutine) ersetzt.
virtual void action () = 0;
- Die Methode action stellt die eigentliche Aufgabe der Koroutine
dar. Da jedoch nicht alle Koroutinen im System dasselbe tun
sollen, kann action erst in einer spezialisierten Klasse
(z.B. in Application) definiert
werden.
|
|
|
|