函数检测到nErrorCode不为0(连接失败)时就向主框架发送一个自定义消息,如下:
AfxGetApp()->m_pMainWnd->PostMessage(消息,0,0);
主框架接收到该消息后调用一个函数进行处理,在这个函数里先Close()掉Sochet
结构,然后重新Create()和Connect(...),这样只要连接不成功就会一直试图连接
下去直到成功,但是在Relaese版本中一旦这个循环开始启动,之后无论是程序失去
焦点,或是单击程序窗体,甚至鼠标划过菜单时菜单项浮动一下都会非法,又试验如
下操作:
程序运行到一定时间向程序发送WM_CLOSE消息,Release版本也会非法,好像它
接收到任何除了自定义消息之外的消息都会非法
但这些现象在Debug版本中就完全没有出现过
另外如果响应自定义消息的函数仅仅Close()而不重新连接,既对连接失败做一
定处理但不重新连接的话Release版本也不非法
拜托大家帮帮忙,不一定是针对问题本身,认为有价值的建议想法都请告知,我用
Debug版本都半年多了,如能解脱,不胜感激.
7 个解决方案
#1
在release版中使用CSocket在线程中传送消息肯定会有问题
#2
可能是你的那个处理消息的函数有问题
正确的应该是
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
...
return 0;
}
正确的应该是
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
...
return 0;
}
#3
gz
#4
zzhcom(zzhcom) 说得很有可能。
Release下也是可以看到调试信息的,你可以在Release的Project Settings中这样设置:
C/C++页:“Debug Info”项选“Program DataBase”;
Link页:将Generate debug info选项钩上;
然后Rebuild All 一下Release代码,就能在调试中看到Release版本出错的地方了。(这样显示可能有些误差,一般在提示点的上下两行)。
Release下也是可以看到调试信息的,你可以在Release的Project Settings中这样设置:
C/C++页:“Debug Info”项选“Program DataBase”;
Link页:将Generate debug info选项钩上;
然后Rebuild All 一下Release代码,就能在调试中看到Release版本出错的地方了。(这样显示可能有些误差,一般在提示点的上下两行)。
#5
In355Hz,你说的办法一定不错,俺要去试试,我也遇到这个问题。。。
不过之前我就是把DEBUG的编译开关调整得和RELEASE差不多,这样倒不会非法操作了。
不过之前我就是把DEBUG的编译开关调整得和RELEASE差不多,这样倒不会非法操作了。
#6
问题解决,发分,发分
非常感谢zzhcom(zzhcom);同样要感谢In355Hz,受教了
你们二位是怎么知道这些的,希望能有幸交流:
yunbianhuo@sina.com
非常感谢zzhcom(zzhcom);同样要感谢In355Hz,受教了
你们二位是怎么知道这些的,希望能有幸交流:
yunbianhuo@sina.com
#7
你可以使用TerminateProcess()代替发送WM_CLOSE消息结束进程的运行,我一个朋友碰到的问题和你的相似,它也是在Release版中发送WM_CLOSE消息时出现了错误,你可以按照In355Hz说的方法调试一下,问题很可能处在这个消息上。
#1
在release版中使用CSocket在线程中传送消息肯定会有问题
#2
可能是你的那个处理消息的函数有问题
正确的应该是
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
...
return 0;
}
正确的应该是
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
...
return 0;
}
#3
gz
#4
zzhcom(zzhcom) 说得很有可能。
Release下也是可以看到调试信息的,你可以在Release的Project Settings中这样设置:
C/C++页:“Debug Info”项选“Program DataBase”;
Link页:将Generate debug info选项钩上;
然后Rebuild All 一下Release代码,就能在调试中看到Release版本出错的地方了。(这样显示可能有些误差,一般在提示点的上下两行)。
Release下也是可以看到调试信息的,你可以在Release的Project Settings中这样设置:
C/C++页:“Debug Info”项选“Program DataBase”;
Link页:将Generate debug info选项钩上;
然后Rebuild All 一下Release代码,就能在调试中看到Release版本出错的地方了。(这样显示可能有些误差,一般在提示点的上下两行)。
#5
In355Hz,你说的办法一定不错,俺要去试试,我也遇到这个问题。。。
不过之前我就是把DEBUG的编译开关调整得和RELEASE差不多,这样倒不会非法操作了。
不过之前我就是把DEBUG的编译开关调整得和RELEASE差不多,这样倒不会非法操作了。
#6
问题解决,发分,发分
非常感谢zzhcom(zzhcom);同样要感谢In355Hz,受教了
你们二位是怎么知道这些的,希望能有幸交流:
yunbianhuo@sina.com
非常感谢zzhcom(zzhcom);同样要感谢In355Hz,受教了
你们二位是怎么知道这些的,希望能有幸交流:
yunbianhuo@sina.com
#7
你可以使用TerminateProcess()代替发送WM_CLOSE消息结束进程的运行,我一个朋友碰到的问题和你的相似,它也是在Release版中发送WM_CLOSE消息时出现了错误,你可以按照In355Hz说的方法调试一下,问题很可能处在这个消息上。