我正在使用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/

10-09 17:33