以原子方式通知并停止gen_event管理器

时间:2011-03-28 09:57:20

标签: erlang gen-event

当我的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_notify之后和stop之前处理从其他进程发送的事件。我宁愿采用一种对处理程序没有要求的方法。

1 个答案:

答案 0 :(得分:2)

据我所知,没有其他方法可以做到这一点,而不是你用来处理的方式真正限于一次调用,除了用{{1}明显杀死事件管理器之外或命令它被自己的主管关闭。