最近在用ACE Proactor框架写一个类似于Proxy的程序,在内网和外网之间转发数据包,但是发现当内网Socket断开以后,程序回调handle_read_stream函数中,此时我Delete外网对应的Handler(断掉外网的TCP连接)和内网的Handler,继续执行Proactor框架报错,具体情况如下:
比如:
在handle_read_stream中 delete internalHandler; delete externalHandler;后
程序在 ACE_Proactor::instance()->proactor_run_event_loop();报错,好像是提示内存有误
由于小弟水平有限,不知这样的问题该如何解决,请教各位大虾了,不啻感激!

最新回复
好好看一下ACE的例子,会有帮助的
请问大家这样的思路不知是否可行,另外如果当前Handler计数不为0,那么delete这个Handler的操作应该从哪处来完成呢?是否还需要启动另外一个监视线程定时判断Handler计数是否为0,若为0则从监视线程delete该Handler?
办法是很简单的,你学过COM没有,其实就是用COM的引用计数的技术,给对象设置一个AddRef和Release方法,只要调用了对象的方法,就AddRef,结束操作就Release,在Release里面,发现引用计数成为0,则delete this,肯定不会出错。
需要注意的要点:
1、引用计数是一个变量,初始值最好是1而不是0,你想想为什么。
2、操作引用计数,一定要增加多线程保护,而且Release里面,不可以使用ACE_GUARD宏。
在此感谢winston和各位的大力帮助!