home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 300-399 / ff339.lzh / PCQ / Examples / Task.p < prev    next >
Text File  |  1990-03-19  |  2KB  |  76 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.i"}
  13. {$I ":Include/Ports.i"}
  14. {$I ":Include/Graphics.i"}
  15. {$I ":Include/DOS.i"}
  16. {$I ":Include/Tasks.i"}
  17.  
  18. CONST
  19.     subTaskName : String = "SubTask";
  20.     subTaskPtr : TaskPtr = Nil;
  21.  
  22. { Data shared by main and subTaskRtn }
  23.  
  24.     Counter : Integer = 0;
  25.     PrepareToDie : Boolean = False;
  26.  
  27. Procedure CleanUp;
  28. begin
  29.    if subTaskPtr <> Nil then begin
  30.     PrepareToDie := True;
  31.     while PrepareToDie do;
  32.     DeleteTask(SubTaskPtr);
  33.    end;
  34.    CloseLibrary(GfxBase);
  35. end;
  36.  
  37.  
  38. { subTaskRtn increments Counter every 1/60 second }
  39.  
  40. Procedure SubTaskRtn;
  41. var
  42.     Temp : Integer;
  43. begin
  44.     While not PrepareToDie do begin
  45.     WaitTOF;
  46.     Counter := Succ(Counter);
  47.     end;
  48.     PrepareToDie := False;    { signal ready to go }
  49.     Temp := Wait(0);        { wait while the ax falls }
  50. end;
  51.  
  52. var
  53.     k : Integer;
  54.     ct : Integer;
  55. begin
  56.     GfxBase := OpenLibrary("graphics.library",0);
  57.     if GfxBase = Nil then begin
  58.     Writeln('Can\'t open the graphics.library');
  59.     Exit(20);
  60.     end;
  61.  
  62.     SubTaskPtr := CreateTask(subTaskName,0,Adr(subTaskRtn),2000);
  63.     if SubTaskPtr = Nil then begin
  64.     Writeln('Can\'t create subtask');
  65.     CloseLibrary(GfxBase);
  66.     Exit(10);
  67.     end;
  68.  
  69.     for k := 0 to 9 do begin
  70.     Delay(50);  { main is a process and can call Delay() }
  71.     ct := Counter;
  72.     Writeln('Counter is ', ct);
  73.     end;
  74.     CleanUp;
  75. end.
  76.