Ejemplo n.º 1
0
void ioInit(void) {
	gIOTerminate = 0;
	gHandlerCount = 0;
	gReqList = NULL;
	gReqEnd = NULL;

	gIOThreadId = 0;

	gQueueSema.init_count = 1;
	gQueueSema.max_count = 1;
	gQueueSema.option = 0;

	gProcSemaId = CreateSema(&gQueueSema);
	gEndSemaId = CreateSema(&gQueueSema);
	gIOPrintfSemaId = CreateSema(&gQueueSema);

	// default custom simple action handler
	ioRegisterHandler(IO_CUSTOM_SIMPLEACTION, &ioSimpleActionHandler);

	gIOThread.attr		= 0;
	gIOThread.stack_size	= THREAD_STACK_SIZE;
	gIOThread.gp_reg	= &_gp;
	gIOThread.func		= &ioWorkerThread;
	gIOThread.stack		= thread_stack;
	gIOThread.initial_priority = 30;

	isIORunning = 1;
	gIOThreadId = CreateThread(&gIOThread);
	StartThread(gIOThreadId, NULL);
}
Ejemplo n.º 2
0
void ioInit(void) {
	gIOTerminate = 0;
	gHandlerCount = 0;
	gReqList = NULL;
	gReqEnd = NULL;
	
	gDispatcherThreadID = 0;
	gIOThreadId = 0;
	
	gQueueSema.init_count = 1;
	gQueueSema.max_count = 1;
	gQueueSema.option = 0;

	gProcSemaId = CreateSema(&gQueueSema);
	gEndSemaId = CreateSema(&gQueueSema);
	gIOPrintfSemaId = CreateSema(&gQueueSema);
	
	ChangeThreadPriority (  GetThreadId (), 29 );

	// default custom simple action handler
	ioRegisterHandler(IO_CUSTOM_SIMPLEACTION, &ioSimpleActionHandler);
	
	memset(&gIOThread, 0, sizeof(gIOThread));
	
	gIOThread.func         = (void *)ioThreadDispatcher;
	gIOThread.stack        = disp_stack;
	gIOThread.stack_size   = THREAD_STACK_SIZE;
	gIOThread.gp_reg       = &_gp;
	gIOThread.initial_priority = 0;
	
	alarmID = SetAlarm( 625, &ioAlarmFunc, NULL); 
	
	// this one manages the thread switching in alarm intervals
	gDispatcherThreadID = CreateThread(&gIOThread);
	StartThread(gDispatcherThreadID, NULL);

	gIOThread.func         = (void *)ioWorkerThread;
	gIOThread.stack        = thread_stack;
	gIOThread.initial_priority = 30;

	isIORunning = 1;
	gIOThreadId = CreateThread(&gIOThread);
	StartThread(gIOThreadId, NULL);
	
	ChangeThreadPriority (  GetThreadId (), 30 );
}