home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / misc / emu / AROSdev.lha / AROS / test / tasktest2.c < prev   
Encoding:
C/C++ Source or Header  |  1996-10-24  |  2.2 KB  |  109 lines

  1. /*
  2.     (C) 1995-96 AROS - The Amiga Replacement OS
  3.     $Id: tasktest2.c,v 1.4 1996/10/23 14:07:21 aros Exp $
  4.     $Log: tasktest2.c,v $
  5.     Revision 1.4  1996/10/23 14:07:21  aros
  6.     #define was renamed
  7.  
  8.     Revision 1.3  1996/10/19 17:07:32  aros
  9.     Include <aros/machine.h> instead of machine.h
  10.  
  11.     Revision 1.2  1996/08/01 17:41:41  digulla
  12.     Added standard header for all files
  13.  
  14.     Desc:
  15.     Lang:
  16. */
  17. #include <exec/execbase.h>
  18. #include <exec/memory.h>
  19. #include <exec/tasks.h>
  20. #include <clib/exec_protos.h>
  21. #include "memory.h"
  22. #include <aros/machine.h>
  23. #include <stdio.h>
  24.  
  25. #define NEWLIST(l)                          \
  26. ((l)->lh_Head=(struct Node *)&(l)->lh_Tail, \
  27.  (l)->lh_Tail=NULL,                         \
  28.  (l)->lh_TailPred=(struct Node *)(l))
  29.  
  30. /* shared */
  31. int cnt;
  32. int sigbit1,sigbit2;
  33. struct Task *parent;
  34. extern struct ExecBase *SysBase;
  35.  
  36. #define STACKSIZE 4096
  37.  
  38. static void entry(void)
  39. {
  40.     int i=0;
  41.  
  42.     sigbit2=AllocSignal(-1);
  43.     Signal(parent,1<<sigbit1);
  44.     if(sigbit2>=0)
  45.     {
  46.     for(i=0;i<9;i++)
  47.     {
  48.         Wait(1<<sigbit2);
  49.         cnt++;
  50.     }
  51.     for(i=0;i<10000;i++)
  52.         cnt++;
  53.  
  54.     FreeSignal(sigbit2);
  55.     }
  56.     Wait(0);/* Let the parent remove me */
  57. }
  58.  
  59. int main(int argc, char* argv[])
  60. {
  61.     struct Task *t;
  62.  
  63.     parent=SysBase->ThisTask;
  64.  
  65.     sigbit1=AllocSignal(-1);
  66.     if(sigbit1>=0)
  67.     {
  68.     t=(struct Task *)AllocMem(sizeof(struct Task), MEMF_PUBLIC|MEMF_CLEAR);
  69.     if(t!=NULL)
  70.     {
  71.         UBYTE *s;
  72.         s=(UBYTE *)AllocMem(STACKSIZE, MEMF_PUBLIC|MEMF_CLEAR);
  73.         if(s!=NULL)
  74.         {
  75.         t->tc_Node.ln_Type=NT_TASK;
  76.         t->tc_Node.ln_Pri=0;
  77.         t->tc_Node.ln_Name="new task";
  78.         t->tc_SPLower=s;
  79.         t->tc_SPUpper=s+STACKSIZE;
  80. #if AROS_STACK_GROWS_DOWNWARDS
  81.         t->tc_SPReg=(UBYTE *)t->tc_SPUpper-SP_OFFSET;
  82. #else
  83.         t->tc_SPReg=(UBYTE *)t->tc_SPLower-SP_OFFSET;
  84. #endif
  85.         NEWLIST(&t->tc_MemEntry);
  86.         AddTask(t,&entry,NULL);
  87.         SetTaskPri(t,1);
  88.         printf("%p %p %p %p\n",t,FindTask("new task"),
  89.                SysBase->ThisTask,FindTask(NULL));
  90.         Wait(1<<sigbit1);
  91.         if(sigbit2>=0)
  92.         {
  93.             int i;
  94.             for(i=0;i<10;i++)
  95.             {
  96.             Signal(t,1<<sigbit2);
  97.             printf("%d\n",cnt);
  98.             }
  99.             RemTask(t);
  100.         }
  101.         FreeMem(s,STACKSIZE);
  102.         }
  103.         FreeMem(t,sizeof(struct Task));
  104.     }
  105.     FreeSignal(sigbit1);
  106.     }
  107.     return 0;
  108. }
  109.