home *** CD-ROM | disk | FTP | other *** search
- {$R-,S-,I-,D-,F-,V-,B-,N-,L- }
- Program MTest;
-
- { Programm zum Testen des Message-Passing
- Christian Philipps Software-Technik
- Stand: 01/89
- }
-
- USES Dos, Crt, CpMulti;
-
- VAR MessageBuffer : String;
- SubNo : TaskNoType;
- BeepNo : TaskNoType;
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE TaskMsgOut(txt : string);
-
- { Sichere Ausgabe eines Strings }
-
- BEGIN {TaskMsgOut}
- BindCPU;
- Writeln(txt);
- ReleaseCPU;
- END; {TaskMsgOut}
-
- {-----------------------------------------------------------------------------}
-
- {$F+}
- PROCEDURE Beep(P:Pointer);
-
- { Erste SubTask }
-
- BEGIN {Beep}
- REPEAT
- Sound(200);
- Delay(5);
- NoSound;
- UNTIL Keypressed;
-
- TaskMsgOut('Beep: Senden an SubTask...');
- IF Send(SubNo,@MessageBuffer,Length(MessageBuffer)+1,Wait) <> Task_OK
- THEN Writeln('Beep: Empfangsstatus nicht O.K.')
- ELSE Writeln('Beep: Nachricht wurde korrekt empfangen!');
-
- TaskMsgOut('Beep: Beenden der Veranstaltung...');
- Terminate;
- END; {Beep}
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE SubTask(P:Pointer);
-
- { Zweite SubTask }
-
- VAR Message : String;
-
- BEGIN {SubTask}
- TaskMsgOut('SubTask: Gestartet! - Schlafe für 5 Sekunden!');
- Sleep(Seconds(5));
-
- TaskMsgOut('SubTask: Gehe auf Empfang mit Warten...');
- IF Receive(BeepNo,@Message,Wait) <> Task_OK
- THEN TaskMsgOut('SubTask: Fehler bei Receive!!!!')
- ELSE TaskMsgOut('SubTask: Received: '+Message);
-
- TaskMsgOut('SubTask: Abholen der Message von Master-Task, so vorhanden');
- IF Receive(AnyTask,@Message,NoWait) <> Task_OK
- THEN TaskMsgOut('SubTask: Fehler bei Receive!!!!')
- ELSE TaskMsgOut('SubTask: Received: '+Message);
-
- Writeln('SubTask: Message kam von Task Nr. ',ReceivedFrom);
- TaskMsgOut('SubTask: Terminieren...!');
- Terminate;
- END; {SubTask}
- {$F-}
-
- {-----------------------------------------------------------------------------}
-
- BEGIN {Main}
- ClrScr;
- MessageBuffer := 'Dies ist eine Nachricht!!';
-
- Writeln('MasterTask: Starten der Beep-Task!');
- BeepNo := CreateTask(Beep,NIL,Pri_User,500);
- IF BeepNo < 0
- THEN Writeln('MasterTask: Fehler beim Erzeugen der Beep-Task!');
-
- Writeln('MasterTask: Starten von SubTask!');
- SubNo := CreateTask(SubTask,NIL,Pri_User,1000);
- IF SubNo < 0
- THEN BEGIN
- Writeln('MasterTask: Task-Create failed!!');
- Halt;
- END;
-
- Sleep(Seconds(1)); { Laß Sub-Task zu Wort kommen }
-
- Writeln('MasterTask: Nun warten wir auf das Empfangen der Nachricht!');
- IF Send(SubNo,@MessageBuffer,Length(MessageBuffer)+1,Wait) <> Task_OK
- THEN Writeln('MasterTask: Empfangsstatus nicht O.K.')
- ELSE Writeln('MasterTask: Nachricht wurde korrekt empfangen!');
-
- Writeln('MasterTask: schlafe für 2 Sekunden...');
- Sleep(Seconds(2));
-
- Writeln('MasterTask: <RETURN> beendet!');
- Readln;
- NoSound;
- END. {Main}