;/* simpletask.c - Execute me to compile me with SAS C 5.10
LC -b1 -cfistq -v -y -j73 simpletask.c
Blink FROM LIB:c.o,simpletask.o TO simpletask LIBRARY LIB:LC.lib,LIB:Amiga.lib
quit
simpletask.c - Uses the amiga.lib function CreateTask() to create a simple
subtask. See the Includes and Autodocs manual for CreateTask() source code
*/
#include <exec/types.h>
#include <exec/memory.h>
#include <exec/tasks.h>
#include <libraries/dos.h>
#include <clib/exec_protos.h>
#include <clib/alib_protos.h>
#include <stdlib.h>
#include <stdio.h>
#ifdef LATTICE
int CXBRK(void) { return(0); } /* Disable Lattice CTRL/C handling */
int chkabort(void) {return(0);}
#endif
#define STACK_SIZE 1000L
/* Task name, pointers for allocated task struct and stack */
struct Task *task = NULL;
char *simpletaskname = "SimpleTask";
ULONG sharedvar;
/* our function prototypes */
void simpletask(void);
void cleanexit(UBYTE *,LONG);
void main(int argc,char **argv)
{
sharedvar = 0L;
task = CreateTask(simpletaskname,0,simpletask,STACK_SIZE);
if(!task) cleanexit("Can't create task",RETURN_FAIL);
printf("This program initialized a variable to zero, then started a\n");
printf("separate task which is incrementing that variable right now,\n");
printf("while this program waits for you to press RETURN.\n");
printf("Press RETURN now: ");
getchar();
printf("The shared variable now equals %ld\n",sharedvar);
/* We can simply remove the task we added because our simpletask does not make */
/* any system calls which could cause it to be awakened or signalled later. */
Forbid();
DeleteTask(task);
Permit();
cleanexit("",RETURN_OK);
}
void simpletask()
{
while(sharedvar < 0x8000000) sharedvar++;
/* Wait forever because main() is going to RemTask() us */
Wait(0L);
}
void cleanexit(UBYTE *s, LONG e)
{
if(*s) printf("%s\n",s);
exit(e);
}
[Back to Amiga Developer Docs]