我创建一个基于对话框的程序,在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 ){}
2 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
正确的接受窗口消息应该这样定义...
头文件 xx.h中
afx_msg LRESULT OnLog(WPARAM wParam,LPARAM lParam);
要和其它AFX_MSG函数写一起
然后XXX.CPP
LRESULT CTeststDlg::OnLog(WPARAM wParam,LPARAM lParam)
{
.......
return 0;
}
//在消息响应地方这样写
ON_MESSAGE(WM_LOG,OnLog)
你那样的接收消息函数在VS中无法编译在VC6.0中虽然能编译但会出错!!
如果还有问题可以使用一下CWinThread
慕妹3242003
TA贡献1824条经验 获得超6个赞
主程序退出时,你的线程没有退出啊
线程找不到老爸了,并且主程序退出后,g_hWnd所代表的窗体是否还存在,如果不存在,肯定宕掉,所以发送消息之前一定要检查g_hWnd是否还存在
设置一个BOOL变量,在OnOK设置为TRUE,在OnCancel设置为FALSE
在线程函数的循环中检查该BOOL变量,如果是FALSE就退出
- 2 回答
- 0 关注
- 93 浏览
添加回答
举报
0/150
提交
取消