这两天一直在写多线程的程序
有点意思
--------------------------------------分割线--------------------------------------
PostMessage和SendMessage()
SendMessage()是等待消息处理完毕后才返回
所以界面会卡住
配合 UpdataWindow()刷新界面会好点,至少不会出现程序的假死现象
但是,还是动不了,这个颇让我有点郁闷
----------------------------------------分割线---------------------------------
PostMessage()是直接放到消息队列就走了,不管执行不执行,这个是很好,很不错
但是,在线程执行的过程中,如果你强制退出了,在Debug情况下,会出现断言失败
真郁闷
我想可能是发送的消息没有处理而程序已经退出了所导致的吧
-----------------------------------又是分割线------------------------------------
解决的方法是
-------------------------------此方法貌似不对-------------------------------------
将this指针作为参数传入后
CDiskRecoveryDlg *hwnd=(CDiskRecoveryDlg*)CWnd::FromHandle(((CDiskRecoveryDlg*)lpParam)->m_hWnd);
CDiskRecoveryDlg *thispointer=(CDiskRecoveryDlg *)lpParam;
用thispointer->UpdateWindow();
用hwnd->PostMessage(WM_UPDATE_MESSAGE,0,0);
在强制退出的时候就不会出现断言失败了
-------------------------------------------------------------------------------------
貌似我用了sleep(1)来等待一下可以解决,
真正的原因是
当我关闭窗口后,系统还是继续处理消息,调用了UpdateData函数,而此时窗口已经销毁,所以出现错误。
期待高手探讨,这个问题困惑我很久了