У меня есть основной цикл, и у меня есть функция, которая отображает меню с некоторыми вариантами и ждет ввода пользователя.
Дело в том, что я также должен проверить, произошло ли новое событие - в моем конкретном случае получено новое сообщение, но это совсем не актуально -, и я не могу дождаться пользователя выполните действие: я должен реализовать тайм-аут для этой функции.Прерывать функцию внутри основного цикла через определенное время
Вот простой пример того, что я говорю о:
int choice;
for(;;){
/* a new message could be arrived and we should read it now ... */
choice = menu_function();
/*
...but the user still hasn't made an action,
so the menu_function() hasn't returned yet.
*/
switch(choice){
case 1:
break;
case 2:
break;
default:
break;
}
}
До сих пор я думал использовать fork()
перед menu_function()
и kill()
этот процесс после того, как он получил SIGALRM
сигнал через alarm()
, но дон Думаю, это правильное решение, поскольку оно находится внутри цикла.
Какое решение я должен принять?
P.S. Я не думаю, что это дубликат, поскольку, как я уже сказал, запрос прерывания функции находится внутри цикла. Или, по крайней мере, для меня, я думаю, что это совсем другое дело.
Возможный дубликат [Как установить тайм-аут для функции в C?] (Http://stackoverflow.com/questions/7738546/how-to-set-a-timeout-for-a-function-in- c) – iwaduarte