ace_reactor 如何彻底关闭
我用ace reactor 做服务器程序。在启动中ACE_INET_Addr addr_to_listen(global.listenport, ACE_LOCALHOST);
//ClientAcceptor acceptor;
acceptor.reactor(ACE_Reactor::instance());
//开始监听,向反应器进行登记,请求它在可以接受新连接时回调自己。
if (acceptor.open(addr_to_listen) == -1)
return ;
//进入反应器事件循环
ACE_Reactor::instance()->run_reactor_event_loop();
开启监听。分两个类处理,ClientAcceptor,对接受事件向反应器登记,并分发
ClientService, 处理连接,接收客户端数据,分发到send 线程做数据处理。
关闭: Quit_Handler *quit_handler_;
ACE_Reactor *r = ACE_Reactor::instance();
quit_handler_ = new Quit_Handler (r);
r->notify (quit_handler_);
ACE_Reactor::instance()->remove_handler(acceptor.get_handle(),ACE_Event_Handler::ACCEPT_MASK);
这样之后,每次都关不掉。
提示:0x004ba33d 处未处理的异常: 0xC0000005: 读取位置 0xfeeeffb6 时发生访问冲突。程序位置为ClientAcceptor 析构函数处。
为什么会这样呢 用notification机制关闭reactor,好像书上有例子
析构函数出问题,是不是调用了2次delete之类的?多贴些代码看看 多贴点代码出来吧,
比如类Quit_Handler 的handle_exception里面做了什么事情?
在哪里做的delete等等
还有就是把异常时候的堆栈信息也能便于定位问题
页:
[1]