找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3452|回复: 2

Proactor中的Handle对象应该怎样删除呢?

[复制链接]
发表于 2010-7-6 21:34:26 | 显示全部楼层 |阅读模式
我用到啊Proactor中的Acctpor和Connector来创建句柄,并且在句柄中使用了定时器。现在遇到需要删除句柄的时机问题:
1、在handle_read_stream中如果result.success为false时删除,这是在对方主动断开连接的时候删除。---没有问题
2、在定时器到达的时候(如果要删除,我会设置一个标志,并让sock关闭),这时候也会到(1)所示的情况中去,然后将句柄删除。

但是如果遇到要在程序退出的时候将这些句柄都删除了,再退出,则可能会遇到一些问题:
a、如果此时还是基于上面的(1)中设置的标志,从而在handle_read_stream中将其删除,这样的话,在删除前就不能将Proactor停止掉,而且何时停止这个时间不好控制(尤其是有大量的handler要删除的话,则可能花费比较长的时间)
b、如果直接将所有的对象全部删除,则可能handler正处于proactor中,从而让proactor调用时出现野指针的情况。
c、不删除,反正也是程序要退出了

我现在倾向于使用上面的c,因为前面的方法都有些瑕疵。。


敢问各位在使用的时候有遇到这样的问题吗?
发表于 2010-7-6 23:05:51 | 显示全部楼层
其实不难,先关闭Proactor框架,然后进行同步处理就可以了。已经发出的异步请求都会自动结束返回的。
 楼主| 发表于 2010-7-10 11:32:04 | 显示全部楼层
谢谢,我按照这个思路,将proactor框架在最先关闭,果然就没有前面提到的同步问题了。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-1 09:31 , Processed in 0.016964 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表