Release编译后,点确定,然后点确定或者退出什么的就会当掉,为什么?

我创建一个基于对话框的程序,在Debug下执行一切正常,但是Release编译后,点确定,然后点确定或者退出什么的就会当掉。谁知道为什么?谢谢了

编译器VC++6.0
代码就是框架生成,然后增加的如下代码

WM_LOG消息定义
消息影射代码
g_hWnd 是HWND类型全局变量
OnOK()
{
g_hWnd = GetSafeHwnd();
DWORD dwThreadID;
CreateThread( 
NULL, 0, 
(LPTHREAD_START_ROUTINE)TSer,
(LPVOID)this, 0, &dwThreadID );
}

//线程函数
DWORD TSer( LPVOID dwParam )
{
while ( 1 )
{
::SendMessage( g_hWnd, WM_LOG, 0, 0 );
Sleep( 5000 );

}
return 0;
}
//WM_LOG消息响应函数
void CTeststDlg::OnLog( LPCTSTR strLog )
{
}

MYYA
浏览 71回答 2
2回答

白猪掌柜的

正确的接受窗口消息应该这样定义...头文件 xx.h中afx_msg LRESULT OnLog(WPARAM wParam,LPARAM lParam);要和其它AFX_MSG函数写一起然后XXX.CPPLRESULT CTeststDlg::OnLog(WPARAM wParam,LPARAM lParam){.......return 0;}//在消息响应地方这样写ON_MESSAGE(WM_LOG,OnLog) 你那样的接收消息函数在VS中无法编译在VC6.0中虽然能编译但会出错!!如果还有问题可以使用一下CWinThread

慕妹3242003

主程序退出时,你的线程没有退出啊 线程找不到老爸了,并且主程序退出后,g_hWnd所代表的窗体是否还存在,如果不存在,肯定宕掉,所以发送消息之前一定要检查g_hWnd是否还存在设置一个BOOL变量,在OnOK设置为TRUE,在OnCancel设置为FALSE在线程函数的循环中检查该BOOL变量,如果是FALSE就退出
打开App,查看更多内容
随时随地看视频慕课网APP