//
// Interprocess communications example
//
#include <stdio.h>
#include <dos.h>
#include <mem.h>
#include "mmkernel.h"
TASK_INFO task_info;
void task1(void);
void task2(void);
int pid1, pid2;
//-------------------------------------------------------------------
void main()
{
// microkernel initialization
mK_init();
// task creation
task_info.stack_size = 4000;
task_info.default_priority = 0;
task_info.current_priority = 0;
task_info.name = "1st task";
task_info.code = task1;
pid1 = mK_create_task(&task_info);
task_info.name = "2nd task";
task_info.code = task2;
pid2 = mK_create_task(&task_info);
mK_start();
} // fin de main
//-----------------------------------------
void task1(void)
{
int i;
int result;
if(mK_local_init())
{
return;
}
for(i=0;i<1000;++i)
{
if(!(i%100))
{
result = mK_non_blocking_send(mKLOCAL_MACHINE,
pid2 ,
"|||||||||||||||",
7);
}
else
{
mK_yield();
}
}
mK_end();
}
//-----------------------------------------------------------
void task2(void)
{
int result;
int sender_machine;
int sender_pid;
static char buffer[20];
int length;
int reply_requested;
if(mK_local_init())
{
return;
}
while(1)
{
result = mK_receive(&sender_machine,
&sender_pid,
buffer,
&length,
&reply_requested,
mKNOWAIT);
if(result == mKRECEIVE_NOTHING)
{
printf("_");
}
else // there's something in the message queue
{
buffer[length] = 0;
printf("%s", buffer);
}
mK_yield();
}
} // fin de proceso2