peakzhang 发表于 2008-5-21 23:18:00

Reactor事件注册与解注册

reactor中,handler绑定事件,然后向reactor注册,这都是自己要做的步骤,我不明白的是,如果一个handler绑定了write_mask,read_mask,当handle_input返回-1的时候,ace会自动帮我们做一个事件(read_mask)的解除注册操作,这样,按理说,我们不需要在接下来的handle_close中再调用remove_handler了,但是很多程序都又重新调用了remove_handler,这不是重复解注册吗,不明白ace在handle_input返回-1,和,调用handle_close之间,发生了什么 ??

peakzhang 发表于 2008-5-21 23:18:12

If u need remove another mask_bit , call remove_handler, else don't call it.重复解注 is wrong!

peakzhang 发表于 2008-5-21 23:18:25

但是我重复解注没有返回任何错误,呵呵,

再说,我在源码中也没有找到自动解注的代码,奇怪

peakzhang 发表于 2008-5-21 23:18:33

如果是ACE_WFMO_Reactor,handler返回-1,就会通过ACE_WFMO_Reactor_Handler_Repository::unbind_i来解除注册,你调用remove_handler也会是通过ACE_WFMO_Reactor_Handler_Repository::unbind_i来接触注册的。去看看源码就知道了。即使是重复解出注册也是不会有问题的,内部会有判断。

peakzhang 发表于 2008-5-21 23:18:45

again 重复解注 is wrong!
但是我重复解注没有返回任何错误,呵呵,
It'll bite you later.

peakzhang 发表于 2008-5-21 23:18:58

steven99ca:
能不能解释一下It'll bite you later啊,既然是错的就一定有原因,能不能说明白点?让我们学习学习!thx!
页: [1]
查看完整版本: Reactor事件注册与解注册