免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4114 | 回复: 1
打印 上一主题 下一主题

[其他] [ACE编程] 菜鸟求助,有代码求真相!!! [复制链接]

论坛徽章:
1
2015亚冠之德黑兰石油
日期:2015-05-30 16:14:41
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-20 10:20 |只看该作者 |倒序浏览
本帖最后由 hiterator 于 2013-03-20 10:28 编辑

刚学习ACE编程,找了个程序调试了下,看起来没问题;
连接服务器成,之后程序结束时就崩溃了,请懂行的大侠给指导下,看是不是违反了ACE编程规则;
感谢~

补充:
1. 把fini去掉好像就好了,why? 有人说init和fini必须配对使用;

  1. #include "ace/ACE.h"
  2. #include "ace/Log_Msg.h"

  3. #include "ace/OS.h"
  4. #include "ace/Reactor.h"
  5. #include "ace/SOCK_Connector.h"

  6. #define MAX_MYCLIENT_BUFFER     (1023)


  7. #ifdef _DEBUG
  8. #pragma comment(lib, "ACEd.lib")
  9. #else
  10. #pragma comment(lib, "ACE.lib")
  11. #endif // _DEBUG

  12. using namespace std;

  13. class CMyClient : public ACE_Event_Handler
  14. {
  15. public:
  16.     bool open()
  17.     {
  18.         ACE_SOCK_Connector conn;
  19.         ACE_INET_Addr addr(6789, "127.0.0.1");

  20.         ACE_Time_Value timeout(5, 0);

  21.         int nRet = conn.connect(peer_, addr, &timeout);
  22.         if (0 != nRet)
  23.         {
  24.             ACE_ERROR((LM_ERROR, "connect ret(%d) failed.\n", nRet));
  25.             return false;
  26.         }

  27.         ACE_Reactor::instance()->register_handler(this, ACE_Event_Handler::READ_MASK);

  28.         ACE_DEBUG((LM_DEBUG, "connect ok.\n"));

  29.         return true;
  30.     }

  31.     int close()
  32.     {
  33.         int nRet = 0;

  34.         nRet = ACE_Reactor::instance()->remove_handler(this, ACE_Event_Handler::READ_MASK);

  35.         return nRet;
  36.     }

  37.     ACE_HANDLE get_handle(void) const   
  38.     {
  39.         return peer_.get_handle();
  40.     }

  41.     virtual int handle_input(ACE_HANDLE fd)
  42.     {
  43.         int recv = 0;
  44.         ACE_Time_Value timeout(3, 0);

  45.         recv = peer_.recv(buffer_, MAX_MYCLIENT_BUFFER, &timeout);
  46.         if (recv > 0)
  47.         {
  48.             buffer_[recv] = '\0';
  49.             ACE_DEBUG((LM_DEBUG, "recv: [%s]\n", buffer_));
  50.         }
  51.         else // (recv <= 0)
  52.         {
  53.             ACE_ERROR((LM_ERROR, "[handle_input:%t] recv(%d), error(%d)\n", recv, ::WSAGetLastError()));
  54.             return -1;
  55.         }

  56.         return 0;
  57.     }

  58.     virtual int handle_close(ACE_HANDLE handle, ACE_Reactor_Mask close_mask)
  59.     {
  60.         int nRet = 0;

  61.         nRet = peer_.close();

  62.         return nRet;
  63.     }

  64. private:
  65.     ACE_SOCK_Stream peer_;
  66.     char buffer_[MAX_MYCLIENT_BUFFER + 1];

  67.     long timer_;
  68. };


  69. int main(int, char *[])
  70. {
  71.     ACE_ERROR((LM_ERROR, "[main tid:%t] start.\n"));

  72.     ACE::init();

  73.     CMyClient *pClient = new CMyClient();

  74.     pClient->open();

  75.     ACE_Reactor::instance()->run_reactor_event_loop(ACE_Time_Value(10));  // 是不是这个使用有问题??

  76.     pClient->close();

  77.     delete pClient; pClient=NULL;

  78.     ACE::fini(); // 把这个去掉好像就好了
  79.     return 0;
  80. } // 运行结束后程序出现崩溃
复制代码

论坛徽章:
1
2015亚冠之德黑兰石油
日期:2015-05-30 16:14:41
2 [报告]
发表于 2013-03-20 11:18 |只看该作者
顶一下,给出调用栈信息,但偶还是看不懂啊....

{:2_166:}

好像是 析构时出错了,why???

求大侠快来!!!

{:3_190:}
  1.         ACEd.dll!ACE_WFMO_Reactor_Handler_Repository::make_changes_in_current_infos()  行771 + 0x12 字节        C++
  2. >        ACEd.dll!ACE_WFMO_Reactor_Handler_Repository::make_changes()  行417        C++
  3.         ACEd.dll!ACE_WFMO_Reactor::~ACE_WFMO_Reactor()  行1329 + 0x19 字节        C++
  4.         ACEd.dll!ACE_WFMO_Reactor::`vector deleting destructor'()  + 0x57 字节        C++
  5.         ACEd.dll!ACE_Reactor::~ACE_Reactor()  行115 + 0x27 字节        C++
  6.         ACEd.dll!ACE_Reactor::`vector deleting destructor'()  + 0x54 字节        C++
  7.         ACEd.dll!ACE_Reactor::close_singleton()  行179 + 0x25 字节        C++
  8.         ACEd.dll!ACE_Framework_Component_T<ACE_Reactor>::~ACE_Framework_Component_T<ACE_Reactor>()  行22        C++
  9.         ACEd.dll!ACE_Framework_Component_T<ACE_Reactor>::`scalar deleting destructor'()  + 0x16 字节        C++
  10.         ACEd.dll!ACE_Framework_Repository::close()  行75 + 0x23 字节        C++
  11.         ACEd.dll!ACE_Framework_Repository::~ACE_Framework_Repository()  行38        C++
  12.         ACEd.dll!ACE_Framework_Repository::`scalar deleting destructor'()  + 0x16 字节        C++
  13.         ACEd.dll!ACE_Framework_Repository::close_singleton()  行120 + 0x1f 字节        C++
  14.         ACEd.dll!ACE_Object_Manager::fini()  行749        C++
  15.         ACEd.dll!ACE::fini()  行30 + 0x17 字节        C++
  16.         ACEd.dll!ACE_Main_Base::~ACE_Main_Base()  行84        C++
  17.         Test.exe!ACE_Main::~ACE_Main()  + 0x2e 字节        C++
  18.         Test.exe!main(int argc=1, char * * argv=0x00a7e5f0)  行97 + 0x7b 字节        C++
  19.         Test.exe!__tmainCRTStartup()  行582 + 0x19 字节        C
  20.         Test.exe!mainCRTStartup()  行399        C
  21.         kernel32.dll!755c33aa()        
  22.         [下面的框架可能不正确和/或缺失,没有为 kernel32.dll 加载符号]       
  23.         ntdll.dll!77209ef2()        
  24.         ntdll.dll!77209ec5()        
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP