home *** CD-ROM | disk | FTP | other *** search
- /*
- (C) 1995-96 AROS - The Amiga Replacement OS
- $Id: tasktest2.c,v 1.4 1996/10/23 14:07:21 aros Exp $
- $Log: tasktest2.c,v $
- Revision 1.4 1996/10/23 14:07:21 aros
- #define was renamed
-
- Revision 1.3 1996/10/19 17:07:32 aros
- Include <aros/machine.h> instead of machine.h
-
- Revision 1.2 1996/08/01 17:41:41 digulla
- Added standard header for all files
-
- Desc:
- Lang:
- */
- #include <exec/execbase.h>
- #include <exec/memory.h>
- #include <exec/tasks.h>
- #include <clib/exec_protos.h>
- #include "memory.h"
- #include <aros/machine.h>
- #include <stdio.h>
-
- #define NEWLIST(l) \
- ((l)->lh_Head=(struct Node *)&(l)->lh_Tail, \
- (l)->lh_Tail=NULL, \
- (l)->lh_TailPred=(struct Node *)(l))
-
- /* shared */
- int cnt;
- int sigbit1,sigbit2;
- struct Task *parent;
- extern struct ExecBase *SysBase;
-
- #define STACKSIZE 4096
-
- static void entry(void)
- {
- int i=0;
-
- sigbit2=AllocSignal(-1);
- Signal(parent,1<<sigbit1);
- if(sigbit2>=0)
- {
- for(i=0;i<9;i++)
- {
- Wait(1<<sigbit2);
- cnt++;
- }
- for(i=0;i<10000;i++)
- cnt++;
-
- FreeSignal(sigbit2);
- }
- Wait(0);/* Let the parent remove me */
- }
-
- int main(int argc, char* argv[])
- {
- struct Task *t;
-
- parent=SysBase->ThisTask;
-
- sigbit1=AllocSignal(-1);
- if(sigbit1>=0)
- {
- t=(struct Task *)AllocMem(sizeof(struct Task), MEMF_PUBLIC|MEMF_CLEAR);
- if(t!=NULL)
- {
- UBYTE *s;
- s=(UBYTE *)AllocMem(STACKSIZE, MEMF_PUBLIC|MEMF_CLEAR);
- if(s!=NULL)
- {
- t->tc_Node.ln_Type=NT_TASK;
- t->tc_Node.ln_Pri=0;
- t->tc_Node.ln_Name="new task";
- t->tc_SPLower=s;
- t->tc_SPUpper=s+STACKSIZE;
- #if AROS_STACK_GROWS_DOWNWARDS
- t->tc_SPReg=(UBYTE *)t->tc_SPUpper-SP_OFFSET;
- #else
- t->tc_SPReg=(UBYTE *)t->tc_SPLower-SP_OFFSET;
- #endif
- NEWLIST(&t->tc_MemEntry);
- AddTask(t,&entry,NULL);
- SetTaskPri(t,1);
- printf("%p %p %p %p\n",t,FindTask("new task"),
- SysBase->ThisTask,FindTask(NULL));
- Wait(1<<sigbit1);
- if(sigbit2>=0)
- {
- int i;
- for(i=0;i<10;i++)
- {
- Signal(t,1<<sigbit2);
- printf("%d\n",cnt);
- }
- RemTask(t);
- }
- FreeMem(s,STACKSIZE);
- }
- FreeMem(t,sizeof(struct Task));
- }
- FreeSignal(sigbit1);
- }
- return 0;
- }
-