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); }
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 ); }