Erlang 以原子方式通知并停止gen_事件管理器

Erlang 以原子方式通知并停止gen_事件管理器,erlang,gen-event,Erlang,Gen Event,当我的gen_eventmanager进程接收到特定消息时,我希望它在所有处理程序处理完它之后,以及在它们获取并处理任何其他事件之前停止。我能找到的唯一方法是: -module(manager). ... stop(Reason) -> gen_event:sync_notify(manager, {stop, Reason}), gen_event:stop(manager). 但这要求所有处理程序从处理事件({stop,Reason},State)返回remove

当我的
gen_event
manager进程接收到特定消息时,我希望它在所有处理程序处理完它之后,以及在它们获取并处理任何其他事件之前停止。我能找到的唯一方法是:

-module(manager).

...

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

但这要求所有处理程序从
处理事件({stop,Reason},State)
返回
remove\u handler
,否则它们可以在
sync\u notify
之后和
stop
之前处理从不同进程发送的事件。我更愿意采用一种对处理程序没有任何要求的方法

据我所知,除了用退出(Pid,Reason)简单地杀死事件管理器或命令其自己的主管关闭事件管理器之外,没有其他方法可以做到这一点,而您使用的处理方式仅限于一次调用