3

マネージャープロセスが特定のメッセージを受信した場合、gen_eventすべてのハンドラーがそのメッセージを処理した後、他のイベントを取得して処理する前に、メッセージを停止する必要があります。私が見つけることができる唯一の方法はこれです:

-module(manager).

...

stop(Reason) ->
    gen_event:sync_notify(manager, {stop, Reason}),
    gen_event:stop(manager).

remove_handlerただし、これにはすべてのハンドラーがから戻る必要があります。そうしないと、前後handle_event({stop, Reason}, State)の別のプロセスから送信されたイベントを処理できます。ハンドラーに要件を課さないアプローチが必要です。sync_notifystop

4

1 に答える 1

2

私の知る限り、イベントマネージャーを単純に殺すexit(Pid, Reason)か、シャットダウンするように命令する以外に、本当に1回の呼び出しに限定された方法で処理するために使用している方法以外にそれを行う方法はありません。独自のスーパーバイザーによって。

于 2011-03-29T11:29:53.330 に答える