home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
mod201j.zip
/
modula2.exe
/
os2src
/
thread.mod
< prev
next >
Wrap
Text File
|
1996-02-01
|
2KB
|
67 lines
MODULE Thread;
(***********)
(*
Multithreaded example Adapted from 'The Art of OS/2 Warp Programming'
Kathleen Panov, Larry Saloon, Jr. Arthur Panov.
Wiley 1995
*)
(*$XL+ Modula-2 language extensions: '_' allowed for symbol names *)
(*$A default alignment for record fields *)
(*$CDECL- Pascal-style procedures *)
FROM OS2DEF IMPORT APIRET,TID;
FROM InOut IMPORT Write;
IMPORT SYSTEM;
FROM DOSPROCESS IMPORT PRTYC_FOREGROUNDSERVER,
PRTYC_TIMECRITICAL,
PRTYC_REGULAR,
PRTYC_NOCHANGE,
PRTYC_IDLETIME,
PRTYS_THREAD,
DosCreateThread,
DosSetPriority,
DosResumeThread,
DosSleep;
(*$XL+*)
CONST ThreadPriority : ARRAY OF LONGCARD =
[PRTYC_FOREGROUNDSERVER,
PRTYC_TIMECRITICAL,
PRTYC_REGULAR,
PRTYC_NOCHANGE,
PRTYC_IDLETIME];
THREAD_SUSPEND = 1;
VAR arReturn : APIRET;
tidThreadID : ARRAY [0..4] OF TID;
usIndex : CARDINAL;
Adres : SYSTEM.LONGWORD;
PROCEDURE MyThread(Input : LONGCARD);
(******************)
VAR Index : CARDINAL;
Pos : CHAR;
BEGIN
Pos := CHR(CARDINAL(Input) + 48);
FOR Index := 0 TO 500 DO
Write(Pos)
END;
END MyThread;
BEGIN
FOR usIndex := 0 TO 4 DO
Adres := MyThread;
arReturn := DosCreateThread(tidThreadID[usIndex],
Adres,
ThreadPriority[usIndex],
THREAD_SUSPEND,
4096);
arReturn := DosSetPriority(PRTYS_THREAD,
ThreadPriority[usIndex],
0,
tidThreadID[usIndex]);
END;
FOR usIndex := 0 TO 4 DO
arReturn := DosResumeThread(tidThreadID[usIndex]);
END;
arReturn := DosSleep(2500);
END Thread.