home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_08_12
/
8n12074a
< prev
next >
Wrap
Text File
|
1990-08-29
|
2KB
|
54 lines
/* schedcon.c - Scheduling Control task */
#include <synrtx.h>
static handler IdentifyTheCallerTask(msg_t *msg_ptr) {
register task_t caller = msg_ptr->srcTid;
io_putf("Interrupted by task #%w named: %s\n", caller, task_nameOf(caller));
}
task SchedulingControl(void) {
task_t myChild, self;
priority_t myPriority;
timeslice_t myTimeslice;
/* creation of a child named ChildTask, priority 1, timeslice 20ms */
myChild = task_create(ChildTask, "ChildTask", 1, 20, NO_ARG, NO_VAR);
/* print the child taskid in three different ways
io_putw(myChild);
io_putw(task_child());
io_putw(task_idOf("ChildTask"));
/* Start the execution of myChild */
task_resume(myChild);
/* Print my task id and my parent task id */
io_putw(task_self());
io_putw(task_parent());
/* Save my priority and my time slice */
self = task_self();
myPriority = task_priorityOf(self);
myTimeslice = task_timesliceOf(self);
/* Raise my priority */
task_setPriorityOf(self, myPriority + 1);
/* Suspend my child, give him my old priority, and start him again */
task_suspend(myChild);
task_setPriorityOf(myChild, myPriority);
task_resume(myChild);
/* Raise my time slice by 10 real-time units */
task_setTimesliceOf(self, myTimeslice + 10);
/* Give up the cpu */
task_reschedule();
/* When get back here, kill my child, and suicide */
task_terminate(myChild);
task_terminate(self);
}