Interprocess Communication && Multiple threads of execution
USENET News System
news at dartvax.Dartmouth.EDU
Mon May 16 05:35:09 AEST 1988
What routines would you use to implement co-routines, that is,
routines that execute co-operatively.
?
How would you arrange for interprocess communications (again, within
one instance of a program) between these co-routines?
Currently, whenever my program is waiting for an event to happen
(specifically for the moment, a keypress), it checks if the keyboard
is ready (no redirection, here). If not, it calls multitask(),
a simple little routine that dispatches calls to co-routines (that do
not depend upon other events like the keyboard).
Example:
main()
{
printf("Press any key to continue...");
{
char c;
c=xgetch();
}
printf("\n");
}
From: major at eleazar.dartmouth.edu (Lou Major)
Path: eleazar.dartmouth.edu!major
char xgetch()
{
while (! _bios_keybrd(_KEYBRD_READY))
multitask();
return _bios_keybrd(_KEYBRD_READ);
}
/* above routine ignores the fact that extended keycodes are passed in the
upper byte of the return value from _bios_keybrd
This is very IBM-PC specific code, however the general idea is
still applicable
*/
void multitask()
{
putclock();
/* other little things like a bouncing ball on one line of the screen */
}
void putclock()
{
/* code to make Monday, January 1, 1980 12:01:00 am */
}
this works fine for me in practice, although it requires that I make no
calls to the built-in routines getc() and getch()a nd getche() (or
any other "blocking" routines, that is, ones that wait for events
from the keyboard).
I am willing to work around this little idiosyncrasy.
Also, I simplified my multitask() routine a little. In actuality,
another routine is called with the address of a void function taking
0 arguments (eg, void putclock(void); ), and a linked list is
built containing routines to execute on each instantiation of
multitask().
These functions (putclock(), for example) check to see if they
have any action to do (if the time has changed to the next integral
second), and if not, merely return rather quickly.
My multitask function gets called about 5,600 times per second while
waiting for a keypress (on a 6Mhz PC-AT).
I have posted this to comp.lang.C (instead of comp.sys.ibm.pc.d) as
this
is really a C question, not an IBM question.
THank you for your help in this matter.
Lou Major
major at eleazar.darmtouth.edu
major at eleazar.dartcms1.bitnet
More information about the Comp.lang.c
mailing list