找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4463|回复: 2

ace_reactor 如何彻底关闭

[复制链接]
发表于 2009-7-2 13:36:47 | 显示全部楼层 |阅读模式
我用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 析构函数处。
为什么会这样呢
发表于 2009-7-2 15:10:22 | 显示全部楼层
用notification机制关闭reactor,好像书上有例子
析构函数出问题,是不是调用了2次delete之类的?多贴些代码看看
发表于 2009-7-2 15:35:57 | 显示全部楼层
多贴点代码出来吧,
比如类Quit_Handler 的handle_exception里面做了什么事情?
在哪里做的delete等等
还有就是把异常时候的堆栈信息也能便于定位问题
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-23 17:27 , Processed in 0.015871 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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