在vc6中如果在线程中用Update跟新主线程的数据,就会出错。
错误如下:
由于自己做的一款软件 遇到这个问题 所以在总结下 希望能为遇到同类问题的朋友,提供方便,节省时间。
总结解决的方法有如下三个:
一、定义自定的UpdateData消息
具体如下:
1、在主窗体头文件中用下列函数注册windows消息
const UINT WM_UPDATEDATA = ::RegisterWindowMessage(_T("UpdateData"));
2、在主窗体头文件中的消息映射函数申明处添加下列映射
afx_msg void OnUpdateData(WPARAM wParam,LPARAM lParam );
3、在主窗体cpp文件中添加注册函数在END_MESSAGE_MAP()之前
ON_REGISTERED_MESSAGE(WM_UPDATEDATA,OnUpdateData)
4、在主窗体cpp文件中添加函数
void CDlg::OnUpdateData(WPARAM wParam,LPARAM lParam )
{
UpdateData(wParam);
}
5、在所用线程中添加更新函数消息,即进行了updatedata()
pDlg->SendMessage(WM_UPDATEDATA,true);
二、用SetWindwoText与GetWindowText来代替UpdateData的相应功能
三、编译是选择Release版,因为这个错误只要是断言宏出错,所以release版可以避开错误
当然这样做是不安全,会使软件的稳定行降低,因此,第三个方法只作为应急之用。