Здравствуйте уважаемые форумчане. У меня следующая задача, в первом потоке (контексте) создается таймер и запускается отсчет времени, потом текущий контекст приостанавливается и запускается основной поток. По окончанию таймера снова нужно перейти на поток с таймером, но при текущем коде выдает ошибку сегментации. Я так понял обработчик создает еще один поток и проблема именно в этом, тогда как сделать так чтобы обработчик относился к основному потоку? Заранее спасибо за ответы.
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;
}