我正在使用Visual Studio 2010,可与MFC 2008/2010一起使用。
我对THREAD和UPDATEDATA(FALSE)有问题
这是init函数
BOOL CBkav_btap2_appDlg::OnInitDialog(){
....
AfxBeginThread (MyThreadProc,(LPVOID)GetSafeHwnd());
return TRUE; // return TRUE unless you set the focus to a control
}
这是我的想法
UINT __cdecl MyThreadProc( LPVOID pParam )
{
DWORD totalphys;
DWORD availablephys;
DWORD memoload;
CBT2Class* pObject = (CBT2Class*)pParam;
pObject->GetRAMandCPUInfo(totalphys,availablephys,memoload );
CBkav_btap2_appDlg dlgObject;
dlgObject.ec_totalphys = totalphys;
dlgObject.UpdateData(FALSE);<--- Can not update data
return 0;
}
CBT2Class是我之前创建的dll文件中的类。
ec_totalphys只是一个edit_control。
当我运行时,它返回“ Debud断言失败”。我不知道为什么。请帮我。谢谢
p / s:我认为我需要使用SendMessage更新Dialog的数据,但是我搜索了所有地方但仍然无法正常工作。
最佳答案
您正在传递HWND作为thread参数。它不是指针,您不应将其强制转换为任何东西。您可以使用HWND将自定义消息发布到对话框。此自定义消息可以包含wParam和lParam中的数据。对话框中的消息处理程序在主线程中运行,并且可以执行UpdateData调用。请参阅此处的示例,以将自定义消息发布到对话框:http://vcfaq.mvps.org/mfc/12.htm
关于c++ - MFC-UpdateData(False)+线程+调试断言失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23951827/