Login
Проблема с Signal-Handlerами
132 просмотров
Перейти к просмотру всей ветки
Привет
Я пишу прогу на С под Линукс и у следующая проблема - я хочу изменить выполнение программы по какому-нибуть событию (передаеться через сигнал) таким образом чтоб сама программа *СРАЗУ* прервалась и выполнила нужную функцыю. Вопрос: как это реализовать? Проблема состоит в том что выполнение долгих функцый (таких как speep(X)) в *САМОМ* signal-handlere не допустимо.
пример программы:
void my_signalhandler(int s)
{
KEEP_RUNNUNG=0;
}
...
while( KEEP_RUNNING ){ /* main loop */
do_something(); /* функция блокируется на
... неопределенное время */
}
do_when_signal_comes(); /* должно быть запущено по сигналу и
требует длительного времени выполнения*/ ...
В этом примере проблема состоит в том что выполнение программы прерывается не после сигнала (и вызова handlera), а только после проверки KEEP_RUNNING в главном цыкле. Существуют ли какие либо методы асинхронного прерывания программы?
Или может ктонибуть посоветоваеть что нибуть еще,
Всем заранее благодарен!
Я пишу прогу на С под Линукс и у следующая проблема - я хочу изменить выполнение программы по какому-нибуть событию (передаеться через сигнал) таким образом чтоб сама программа *СРАЗУ* прервалась и выполнила нужную функцыю. Вопрос: как это реализовать? Проблема состоит в том что выполнение долгих функцый (таких как speep(X)) в *САМОМ* signal-handlere не допустимо.
пример программы:
void my_signalhandler(int s)
{
KEEP_RUNNUNG=0;
}
...
while( KEEP_RUNNING ){ /* main loop */
do_something(); /* функция блокируется на
... неопределенное время */
}
do_when_signal_comes(); /* должно быть запущено по сигналу и
требует длительного времени выполнения*/ ...
В этом примере проблема состоит в том что выполнение программы прерывается не после сигнала (и вызова handlera), а только после проверки KEEP_RUNNING в главном цыкле. Существуют ли какие либо методы асинхронного прерывания программы?
Или может ктонибуть посоветоваеть что нибуть еще,
Всем заранее благодарен!
Is this the real world, Neo?
