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 >
Text File  |  1996-02-01  |  2KB  |  67 lines

  1. MODULE Thread;
  2. (***********)
  3. (*
  4. Multithreaded example Adapted from 'The Art of OS/2 Warp Programming'
  5. Kathleen Panov, Larry Saloon, Jr. Arthur Panov.
  6. Wiley 1995
  7. *)
  8. (*$XL+       Modula-2 language extensions: '_' allowed for symbol names *)
  9. (*$A         default alignment for record fields                        *)
  10. (*$CDECL-    Pascal-style procedures                                    *)
  11. FROM OS2DEF      IMPORT APIRET,TID;
  12. FROM InOut IMPORT Write;
  13. IMPORT SYSTEM;
  14. FROM DOSPROCESS IMPORT PRTYC_FOREGROUNDSERVER,
  15.                        PRTYC_TIMECRITICAL,
  16.                        PRTYC_REGULAR,
  17.                        PRTYC_NOCHANGE,
  18.                        PRTYC_IDLETIME,
  19.                        PRTYS_THREAD,
  20.                        DosCreateThread,
  21.                        DosSetPriority,
  22.                        DosResumeThread,
  23.                        DosSleep;
  24. (*$XL+*)
  25. CONST ThreadPriority : ARRAY OF LONGCARD =
  26.                       [PRTYC_FOREGROUNDSERVER,
  27.                        PRTYC_TIMECRITICAL,
  28.                        PRTYC_REGULAR,
  29.                        PRTYC_NOCHANGE,
  30.                        PRTYC_IDLETIME]; 
  31.      THREAD_SUSPEND = 1;
  32.  
  33. VAR arReturn    : APIRET;
  34.     tidThreadID : ARRAY [0..4] OF TID; 
  35.     usIndex     : CARDINAL;
  36.     Adres       : SYSTEM.LONGWORD;
  37.    
  38. PROCEDURE MyThread(Input : LONGCARD);
  39. (******************)
  40. VAR Index : CARDINAL;
  41.     Pos   : CHAR;
  42. BEGIN
  43.   Pos := CHR(CARDINAL(Input) + 48);
  44.   FOR Index := 0 TO 500 DO
  45.     Write(Pos)
  46.   END;
  47. END MyThread;
  48.  
  49.     
  50. BEGIN
  51.   FOR usIndex := 0 TO 4 DO
  52.     Adres := MyThread;
  53.     arReturn := DosCreateThread(tidThreadID[usIndex],
  54.                                 Adres,
  55.                                 ThreadPriority[usIndex],
  56.                                 THREAD_SUSPEND,
  57.                                 4096);  
  58.     arReturn := DosSetPriority(PRTYS_THREAD,
  59.                                ThreadPriority[usIndex],
  60.                                0,
  61.                                tidThreadID[usIndex]);
  62.   END;
  63.   FOR usIndex := 0 TO 4 DO
  64.     arReturn := DosResumeThread(tidThreadID[usIndex]);
  65.   END;
  66.   arReturn := DosSleep(2500);
  67. END Thread.