我創建一個基于對話框的程序,在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 關注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消