/** * Exposed function, that enables user to schedule new thread. You can also \ * specify priority via @pr parameter. **/ int UThreadSchedThread(void (*func)(void *),void * argument,int pr,unsigned int stacksize) { if(uThreadContext->isInitialized == 0) { return -1; } ThreadBlock * threadBlock = NULL; if(stacksize == 0) { threadBlock = CreateThread(func,argument,uThreadContext->uThreadOptions.stackSize); } else { threadBlock = CreateThread(func,argument,stacksize); } BlockSignal(TIMER_SIGNAL_NO); RegisterThreadBlockRelation(threadBlock); switch(pr) { case PRIORITY_HIGH: uThreadContext->queueHeads[QUEUE_HIGH_PRIORITY] = AddThreadBlockToList(uThreadContext->queueHeads[QUEUE_HIGH_PRIORITY],threadBlock); break; case PRIORITY_MEDIUM: uThreadContext->queueHeads[QUEUE_MEDIUM_PRIORITY] = AddThreadBlockToList(uThreadContext->queueHeads[QUEUE_MEDIUM_PRIORITY],threadBlock); break; case PRIORITY_LOW: uThreadContext->queueHeads[QUEUE_LOW_PRIORITY] = AddThreadBlockToList(uThreadContext->queueHeads[QUEUE_LOW_PRIORITY],threadBlock); break; } ReScheduleThreads(0); UnblockSignal(TIMER_SIGNAL_NO); return threadBlock->id; }
void GtkMenuItem::SetStateImpl(bool newState) { if (!this->IsCheck()) return; std::vector< ::GtkMenuItem*>::iterator i = this->nativeItems.begin(); while (i != this->nativeItems.end()) { ::GtkMenuItem* nativeItem = *i++; BlockSignal(nativeItem, this); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(nativeItem), newState); UnblockSignal(nativeItem, this); } }
static void InitializeVirtualTimer() { InitializeSignalHandler(); struct sigevent event; event.sigev_signo = TIMER_SIGNAL_NO; event.sigev_notify = SIGEV_THREAD_ID; event._sigev_un._tid = syscall(SYS_gettid); timer_create(CLOCK_ID,&event,&uThreadContext->timerId); struct itimerspec timerSpec; timerSpec.it_interval.tv_sec = 0; timerSpec.it_interval.tv_nsec = uThreadContext->uThreadOptions.timeSlice; timerSpec.it_value.tv_sec = 0; timerSpec.it_value.tv_nsec = uThreadContext->uThreadOptions.timeSlice; timer_settime(uThreadContext->timerId,0,&timerSpec,NULL); UnblockSignal(TIMER_SIGNAL_NO); }