一个程序使用CAsyncSocket类进行局域网通信,Cilent端.设计成连接时在OnConnect
函数检测到nErrorCode不为0(连接失败)时就向主框架发送一个自定义消息,如下:AfxGetApp()->m_pMainWnd->PostMessage(消息,0,0);主框架接收到该消息后调用一个函数进行处理,在这个函数里先Close()掉Sochet
结构,然后重新Create()和Connect(...),这样只要连接不成功就会一直试图连接
下去直到成功,但是在Relaese版本中一旦这个循环开始启动,之后无论是程序失去
焦点,或是单击程序窗体,甚至鼠标划过菜单时菜单项浮动一下都会非法,又试验如
下操作:
   程序运行到一定时间向程序发送WM_CLOSE消息,Release版本也会非法,好像它
接收到任何除了自定义消息之外的消息都会非法
   但这些现象在Debug版本中就完全没有出现过
   另外如果响应自定义消息的函数仅仅Close()而不重新连接,既对连接失败做一
定处理但不重新连接的话Release版本也不非法
   拜托大家帮帮忙,不一定是针对问题本身,认为有价值的建议想法都请告知,我用
Debug版本都半年多了,如能解脱,不胜感激.

解决方案 »

  1.   

    在release版中使用CSocket在线程中传送消息肯定会有问题
      

  2.   

    可能是你的那个处理消息的函数有问题
    正确的应该是
    LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
    {
      ...
      return 0;
    }
      

  3.   

    zzhcom(zzhcom) 说得很有可能。
    Release下也是可以看到调试信息的,你可以在Release的Project Settings中这样设置:
    C/C++页:“Debug Info”项选“Program DataBase”;
    Link页:将Generate debug info选项钩上;
    然后Rebuild All 一下Release代码,就能在调试中看到Release版本出错的地方了。(这样显示可能有些误差,一般在提示点的上下两行)。
      

  4.   

    In355Hz,你说的办法一定不错,俺要去试试,我也遇到这个问题
    不过之前我就是把DEBUG的编译开关调整得和RELEASE差不多,这样倒不会非法操作了。
      

  5.   

    问题解决,发分,发分非常感谢zzhcom(zzhcom);同样要感谢In355Hz,受教了你们二位是怎么知道这些的,希望能有幸交流:[email protected]
      

  6.   

    你可以使用TerminateProcess()代替发送WM_CLOSE消息结束进程的运行,我一个朋友碰到的问题和你的相似,它也是在Release版中发送WM_CLOSE消息时出现了错误,你可以按照In355Hz说的方法调试一下,问题很可能处在这个消息上。