すべての状態で指定された時間が経過してもイベントが発生しない場合はいつでも FSM を終了させたいと考えています。
init コールバックでタイムアウト値を指定することにより、FSM の作成後にイベントがない場合にのみ、このようなシナリオを実現できますが、この機能をすべての状態でも機能させたいと考えています。
簡単で迅速な解決策はありますか?
よろしくお願いします
マット
すべての状態で指定された時間が経過してもイベントが発生しない場合はいつでも FSM を終了させたいと考えています。
init コールバックでタイムアウト値を指定することにより、FSM の作成後にイベントがない場合にのみ、このようなシナリオを実現できますが、この機能をすべての状態でも機能させたいと考えています。
簡単で迅速な解決策はありますか?
マット
各 state の return タプルにタイムアウトを設定できます{next_state, NextStateName, NewStateData, Timeout}
。詳細については、 gen_fsmのドキュメントを参照してください。ただし、gen_fsm に受信メッセージがない場合にのみ機能するため、たとえば、おそらく誰も通信していないときにプロセスを終了したい場合にのみ適しています。ハード制限が必要な場合 (プロトコルなど) は、タイマー終了などを使用erlang:send_after/3
または処理する必要があります。erlang:start_timer/3