2013-06-22 2 views
0

Возможно ли написать обработчик сигнала, который заставляет программу возвращаться из функции?Использовать обработчик сигнала для возврата из функции

Например, в следующем коде:

void myfun() { 
    __asm__("repeat: jmp repeat"); 
} 

myfun() имеет неопределенный цикл. Я хотел бы остановить этот неопределенный цикл и вернуться к основной функции, подняв некоторый сигнал. Это возможно?

Спасибо.

+0

['man setjmp'] (http://linux.die.net/man/3/setjmp) – jxh

ответ

1

Внутри обработчика сигнала выполните команду longjmp на номер setjmp, подготовленный в main.

+0

В данном ассемблере не проверяется какая-либо изменчивая переменная. Я использую его для определения производительности процессора для инструкций филиала, и поэтому помехи от других переменных должны быть минимальными. В идеале я хотел бы создать исключение, которое позволяет возвращать функцию. – Arani

+0

@Arani Я проверил стандарт, и я не вижу никаких положений, запрещающих вам вызывать 'longjmp' непосредственно из обработчика, и тогда цикл не нужно изменять. Я поменяю свой ответ соответственно. –

+0

Я проверю и сообщит вам, если он сработает. – Arani

Смежные вопросы