码迷,mamicode.com
首页 > 其他好文 > 详细

gen_event学习

时间:2014-05-21 04:12:49      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:style   class   c   code   tar   ext   

gen_event 是通用的事件处理行为。

描述:

一个实现事件处理功能的行为模块。OTP事件处理模块包括一个通用的事件管理,负责处理可以动态添加、删除的任意数量的事件。用这个模块实现的事件管理器会有一组标准的功能接口,包括跟踪和错误报告功能。它也将融入OTP 监督树中,请参考OTP设计原则了解更多信息。

每个事件处理以回调方式来实现,回调需要导出一组预先设计好的函数,行为函数和回调函数的关系如下:

gen_event module                   Callback module
----------------                   ---------------
%%作为监督树的一部分来创建事件管理器 gen_event:start_link -----> -
%%添加事件 gen_event:add_handler                   gen_event:add_sup_handler -----> Module:init/1
%%事件通知(同步,异步) gen_event:notify gen_event:sync_notify -----> Module:handle_event/2
%%同步调用 gen_event:call -----> Module:handle_call/2 - -----> Module:handle_info/2
%%事件删除 gen_event:delete_handler -----> Module:terminate/2
%%时间管理起中替换现有事件 gen_event:swap_handler gen_event:swap_sup_handler -----> Module1:terminate/2 Module2:init/1
%%返回事件管理中的事件列表 gen_event:which_handlers -----> -
%%停止事件管理器 gen_event:stop -----> Module:terminate/2 - -----> Module:code_change/3

由于每个事件处理模块都是回调模块,一个事件管理器可以动态添加、删除多个回调模块,因此gen_event比其它behaviours对回调模块的错误更tolerant。如果注册的回调函数失败(返回Reason),时间管理器不会失败,它会调用
Module:terminate/2,传参数:{error,{‘EXIT‘,Reason}},其它的事件不会受到任何影响。

注意:时间管理期器会自动捕获exit信号。
gen_event进程可以进入休眠状态,如果回调函数显示返回hibernate。如果服务器预计会空闲较长时间,但是这个特性要慎用。休眠意味着至少有2个垃圾收集(休眠和唤醒不久后)。一个繁忙的事件处理器在处理多个事件间处理的事情不是你想要的。

还需要注意的是,涉及到多个事件处理,一个事件返回hibernate就足够了,因为这回导致事件管理器进入休眠状态。

除非有特殊说明,这个模块中的所有均会失败,若果指定的管理器不存在,或者参数错误。


下次再补上实例代码吧!


照样一首歌曲送给大家:佛说万物生


gen_event学习,布布扣,bubuko.com

gen_event学习

标签:style   class   c   code   tar   ext   

原文地址:http://www.cnblogs.com/IT-Nobody/p/3739488.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!