为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
MYYA 2023-04-22 22:18:30
我创建一个基于对话框的程序,在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


查看完整回答
反对 回复 2023-04-26
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

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

查看完整回答
反对 回复 2023-04-26
  • 2 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信