home *** CD-ROM | disk | FTP | other *** search
/ AMIGA PD 1 / AMIGA-PD-1.iso / Programme_zum_Heft / Programmieren / Kurztests / PascalPCQ / Examples / Task.p < prev    next >
Text File  |  1990-07-20  |  2KB  |  78 lines

  1. Program TaskExample;
  2.  
  3. {
  4.  *
  5.  * Task.p - a cheap sub-task example by cs (in C)
  6.  *   Cheap =  shared data for communication rather than MsgPorts
  7.  *
  8.  
  9.     This was written originally by Carolyn Scheppner (of CBM) in C.
  10. }
  11.  
  12. {$I "Include:Exec/Ports.i"}
  13. {$I "Include:Graphics/Graphics.i"}
  14. {$I "Include:Graphics/View.i"}
  15. {$I "Include:Libraries/DOS.i"}
  16. {$I "Include:Utils/TaskUtils.i"}
  17. {$I "Include:Exec/Tasks.i"}
  18. {$I "Include:Exec/Libraries.i"}
  19.  
  20. CONST
  21.     subTaskName : String = "SubTask";
  22.     subTaskPtr : TaskPtr = Nil;
  23.  
  24. { Data shared by main and subTaskRtn }
  25.  
  26.     Counter : Integer = 0;
  27.     PrepareToDie : Boolean = False;
  28.  
  29. Procedure CleanUp;
  30. begin
  31.    if subTaskPtr <> Nil then begin
  32.     PrepareToDie := True;
  33.     while PrepareToDie do;
  34.     DeleteTask(SubTaskPtr);
  35.    end;
  36.    CloseLibrary(GfxBase);
  37. end;
  38.  
  39.  
  40. { subTaskRtn increments Counter every 1/60 second }
  41.  
  42. Procedure SubTaskRtn;
  43. var
  44.     Temp : Integer;
  45. begin
  46.     While not PrepareToDie do begin
  47.     WaitTOF;
  48.     Inc(Counter);
  49.     end;
  50.     PrepareToDie := False;    { signal ready to go }
  51.     Temp := Wait(0);        { wait while the ax falls }
  52. end;
  53.  
  54. var
  55.     k : Integer;
  56.     ct : Integer;
  57. begin
  58.     GfxBase := OpenLibrary("graphics.library",0);
  59.     if GfxBase = Nil then begin
  60.     Writeln('Can\'t open the graphics.library');
  61.     Exit(20);
  62.     end;
  63.  
  64.     SubTaskPtr := CreateTask(subTaskName,0,Adr(subTaskRtn),2000);
  65.     if SubTaskPtr = Nil then begin
  66.     Writeln('Can\'t create subtask');
  67.     CloseLibrary(GfxBase);
  68.     Exit(10);
  69.     end;
  70.  
  71.     for k := 0 to 9 do begin
  72.     Delay(50);  { main is a process and can call Delay() }
  73.     ct := Counter;
  74.     Writeln('Counter is ', ct);
  75.     end;
  76.     CleanUp;
  77. end.
  78.