Metropoli BBS
VIEWER: freeze.c MODE: TEXT (ASCII)
//
// 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


[ RETURN TO DIRECTORY ]