yoogera 发表于 2010-7-6 21:34:26

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

我用到啊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,因为前面的方法都有些瑕疵。。


敢问各位在使用的时候有遇到这样的问题吗?

winston 发表于 2010-7-6 23:05:51

其实不难,先关闭Proactor框架,然后进行同步处理就可以了。已经发出的异步请求都会自动结束返回的。

yoogera 发表于 2010-7-10 11:32:04

谢谢,我按照这个思路,将proactor框架在最先关闭,果然就没有前面提到的同步问题了。
页: [1]
查看完整版本: Proactor中的Handle对象应该怎样删除呢?