home *** CD-ROM | disk | FTP | other *** search
- Program ThreadTest; {--- 1993 Matthias Withopf / c't ---}
-
- Uses
- Crt;
-
- Function DosCreateThread(Proc : Pointer;Var TID : Word;
- Stack : Pointer) : Word; Far;
- External 'DOSCALLS' Index 145;
- Function DosWrite(Handle : Word;Str : PChar;Count : Word;
- Var WCount : Word) : Word; Far;
- External 'DOSCALLS' Index 138;
- Function DosExit(x : Word;ExitCode : Word) : Word; Far;
- External 'DOSCALLS' Index 5;
-
- Const
- Thread1Terminated : Boolean = False;
-
- {$S-} { Stack-Überprüfung sollte deaktiviert werden. }
-
- Procedure Thread1; Far;
- Const
- Str = 'Jetzt ist Thread1 aktiv.'^M^J;
- Var
- w : Word;
- Begin
- Repeat
- DosWrite(1,Str,Length(Str),w);
- Delay(700);
- If KeyPressed then
- Begin
- Thread1Terminated := True;
- { Beende nur Thread1, nicht Programm. }
- DosExit(0,0);
- End;
- Until False;
- End;
-
- {$S+} { Stack-Überprüfung kann wieder aktiviert werden. }
-
- Const
- StackSize = 8192;
- Var
- Thread1ID : Word;
- Stack1 : Pointer;
- Begin
- GetMem(Stack1,StackSize); { Alloziere Stack für Thread1. }
- DosCreateThread(@Thread1, { Zeiger auf Prozedur f. Thread}
- Thread1ID,
- { Ende des Stackbereichs als Anfangswert für SS:SP. }
- @PChar(Stack1)[StackSize]);
- Repeat
- WriteLn('Der Hauptprogramm ist aktiv.');
- Delay(1100);
- Until Thread1Terminated;
- FreeMem(Stack1,StackSize); { Gib Stack für Thread1 frei. }
- WriteLn('Programm-Ende');
- End.