メインループがあり、いくつかの選択肢があるメニューを表示してユーザーの入力を待つ機能があります。
新しいイベントが発生するかどうかを確認する必要があります。- 特定のケースでは、新しいメッセージが届きましたが、これはまったく関連しません -と私はユーザーを待つことができません私はその機能のタイムアウトを実装する必要があります。ここで一定時間後にメインループ内の関数を中断します
は私が話しているかの簡単な例である:それはalarm()
を通じてSIGALRM
信号を受信した後
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;
}
}
これまでのところ私はmenu_function()
とkill()
前fork()
を使用しての、このプロセスを考えたが、私ドンそれがループ内にあるので、これが適切な解決策だとは思わない。
どのようなソリューションを採用しますか?
P.S.私はこれが重複しているとは思わない、既に言ったように、要求を中断する関数はループの中にある。少なくとも私にとっては違うと思います。
[Cの関数のタイムアウトを設定するにはどうすればいいですか?](http://stackoverflow.com/questions/7738546/how-to-set-a-timeout-for-a-function-in- c) – iwaduarte