Exemple #1
0
/**
* 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);
		}
	}
Exemple #3
0
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);
}