home *** CD-ROM | disk | FTP | other *** search
- PROGRAM Piepser;
-
- {$R-,S-,I-,D-,F-,V-,B-,N-,L- }
- {
-
- Christian Philipps Software-Technik
- Düsseldorfer Str. 316
- 4130 Moers 1
-
- November 1988
- Stand: 1/89
- }
-
- USES Crt, CpMulti;
-
- CONST NoTsk = 5;
-
- VAR Sem : Pointer; { Koordiniation der Startphase }
- SoundSem : Pointer; { Koordination des Sound()-Zugriffs }
- TaskNo : Word;
- c : Char;
-
- {---------------------------------------------------------------------------}
-
- {$F+}
- PROCEDURE PiepsTask(P:Pointer);
-
- { Diese Task wird im Code-Sharing gefahren und erzeugt alle 3 Sekunden
- einen Piepston }
-
- VAR MyNo : Word;
-
- BEGIN {PiepsTask}
- MyNo := TaskNo; { Hole Nummer aus glob. Variable }
- Writeln('Task Nr. ',MyNo,' ist jetzt aktiv!');
- SemSignal(Sem); { laß Hauptprogramm weiterlaufen }
- REPEAT { Taskrumpf }
- Sleep(Seconds(3));
- SemWait(SoundSem); { Anfordern des Sound-Generators }
- Sound(MyNo * 300);
- Delay(50);
- NoSound;
- SemSignal(SoundSem); { Freigeben des Sound-Generators }
- UNTIL False;
- END; {PiepsTask}
-
- {---------------------------------------------------------------------------}
-
- PROCEDURE BrummTask(P:Pointer);
-
- { Diese Task brummt alle 6 Sekunden für 1/2 Sekunde }
-
- BEGIN {BrummTask}
- REPEAT
- Sleep(Seconds(6));
- SemWait(SoundSem);
- Sound(300);
- Delay(500);
- NoSound;
- SemSignal(SoundSem);
- UNTIL False;
- END; {BrummTask}
- {$F-}
-
- {---------------------------------------------------------------------------}
-
- BEGIN {Main}
- ClrScr;
- Writeln('Dieses Programm erzeugt 5 Tasks, die alle 3 Sekunden einen Piepston');
- Writeln('unterschiedlicher Höhe erzeugen sowie eine Taks, die alle 6 Sekunden');
- Writeln('eine halbe Sekunde lang piepst.');
- Writeln('Die Sound-Tasks haben höhere Priorität als das Hauptprogramm!');
- Writeln;
- Writeln('Das Hauptprogramm verbringt seine Zeit damit, auf eine Eingabe zu warten,');
- Writeln('bis die Anwendung durch Eingabe von ESC beendet wird!');
- Writeln;
-
- { Erzeugen der Semaphoren }
- IF (CreateSem(Sem) <> Sem_OK) OR
- (CreateSem(SoundSem) <> Sem_Ok)
- THEN BEGIN
- Writeln('Fehler beim Erzeugen einer Semaphore!');
- Halt(1);
- END;
-
- { Erzeugen der Pieps-Tasks }
- FOR TaskNo := 1 TO NoTsk DO
- BEGIN
- SemClear(Sem);
- IF CreateTask(PiepsTask,NIL,Pri_Kernel,300) < 0
- THEN BEGIN
- Writeln(^G'Fehler beim Erzeugen der Task ',TaskNo);
- Halt(1);
- END;
- SemWait(Sem);
- END;
-
- { Erzeugen der Brumm-Task }
- IF CreateTask(BrummTask,NIL,Pri_Kernel,300) < 0
- THEN BEGIN
- Writeln(^G'Fehler beim Erzeugen der Slow-Task ');
- Halt(1);
- END;
-
- GotoXY(20,15);
- Writeln('---------------------------------------');
- Window(1,16,80,25);
-
- { Hauptprogramm - Verarbeitung }
- REPEAT
- IF KeyPressed
- THEN BEGIN
- c := ReadKey;
- Write(c);
- IF c=#13
- THEN Writeln;
- END;
- UNTIL c=#27;
-
- SemWait(SoundSem); { Verhindere weitere Tonerzeugung }
- Window(1,1,80,25);
- GotoXY(1,23);
- END.