LINUX.ORG.RU

Сообщения Slonichek

 

Обработчик таймера для переключения контекста

Форум — Development

Здравствуйте уважаемые форумчане. У меня следующая задача, в первом потоке (контексте) создается таймер и запускается отсчет времени, потом текущий контекст приостанавливается и запускается основной поток. По окончанию таймера снова нужно перейти на поток с таймером, но при текущем коде выдает ошибку сегментации. Я так понял обработчик создает еще один поток и проблема именно в этом, тогда как сделать так чтобы обработчик относился к основному потоку? Заранее спасибо за ответы.

void alarm_handler()
{
   printf("Check timer\n");
   Run_my_thread(temp);
   return;
}
void yield_Thread(int second, int usecond)
{
printf("Timer start\n");
signal(SIGALRM, alarm_handler);
  if(second!=0) timer.it_value.tv_sec = second;
  else if(usecond!=0) timer.it_value.tv_usec = usecond;
  timer.it_interval.tv_sec = 0;
  timer.it_interval.tv_usec = 0;
   printf("Next string start alarm\n");
 setitimer(ITIMER_REAL, &timer, NULL);
   Stop_cur_Thread();
}
void Stop_cur_Thread()
{
tempstate="Sleep";
swapcontext(&nextThread, &prevThread);
}
void Run_my_thread(My_Thread *runThread)
{
getcontext(&prevThread);
swapcontext(&prevThread, &runThread->context);
printf("Ve return to maint context\n");
if(tempstate=="Sleep"){
runThread->state="Sleep";
runThread->context=nextThread;
}

 ,

Slonichek
()

RSS подписка на новые темы