home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / dev / e / amigae / rkrmsrc / exec_library / tasks / simpletask.e next >
Text File  |  1995-04-08  |  2KB  |  57 lines

  1. -> simpletask.e - Uses the amigalib function createTask() to create a simple
  2. -> subtask.  See the Includes and Autodocs manual for createTask() source code.
  3.  
  4. MODULE 'amigalib/tasks',
  5.        'other/ecode',
  6.        'dos/dos'
  7.  
  8. ENUM ERR_NONE, ERR_ECODE, ERR_TASK
  9.  
  10. CONST STACK_SIZE=1000
  11.  
  12. -> Task name, pointers for allocated task struct and stack
  13. DEF task=NIL, simpletaskname, sharedvar
  14.  
  15. PROC main() HANDLE
  16.   DEF taskcode
  17.   simpletaskname:='SimpleTask'
  18.  
  19.   sharedvar:=0
  20.  
  21.   -> E-Note: eCodeTask() protects an E function so you can call it from other
  22.   ->         tasks and have access to the global variables of this program
  23.   IF NIL=(taskcode:=eCodeTask({simpletask})) THEN Raise(ERR_ECODE)
  24.   IF NIL=(task:=createTask(simpletaskname, 0, taskcode, STACK_SIZE))
  25.     Raise(ERR_TASK)
  26.   ENDIF
  27.  
  28.   WriteF('This program initialised a variable to zero, then started a\n')
  29.   WriteF('separate task which is incrementing that variable right now,\n')
  30.   WriteF('while this program waits for you to press RETURN.\n')
  31.   WriteF('Press RETURN now: ')
  32.   -> E-Note: WriteF() opens a window if necessary, so use stdout if no stdin
  33.   Inp(IF stdin THEN stdin ELSE stdout)
  34.  
  35.   WriteF('The shared variable now equals \d\n', sharedvar)
  36.  
  37. EXCEPT DO
  38.   IF task
  39.     -> We can simply remove the task we added because our simpletask does
  40.     -> not make any system calls which could cause it to be awakened or
  41.     -> signalled later.
  42.     Forbid()
  43.     deleteTask(task)
  44.     Permit()
  45.   ENDIF
  46.   SELECT exception
  47.   CASE ERR_ECODE;  WriteF('Ran out of memory in eCodeTask()\n')
  48.   CASE ERR_TASK;   WriteF('Can''t create task\n')
  49.   ENDSELECT
  50. ENDPROC IF exception<>ERR_NONE THEN RETURN_FAIL ELSE RETURN_OK
  51.  
  52. PROC simpletask()
  53.   WHILE sharedvar<$8000000 DO sharedvar++
  54.   -> Wait forever because main() is going to RemTask() us
  55.   Wait(NIL)
  56. ENDPROC
  57.