【发布时间】:2014-05-30 09:59:10
【问题描述】:
我使用 Visual Studio 2010,使用 MFC 2008/2010。 我对 THREAD 和 UPDATEDATA(FALSE) 有疑问 这是初始化函数
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 只是一个编辑控件。 当我运行时,它返回“Debud Assertion failed”。我不知道为什么。请帮我。谢谢。 p/s:我想我需要使用 SendMessage 来更新 Dialog 的数据,但我到处搜索但仍然无法工作。
【问题讨论】:
-
UpdateData 旨在通过对话框的控件验证和交换数据值。你的对话框甚至还没有存在(作为一个窗口),更不用说它的任何控件了。您的断言失败的停止点可能会向您展示这一点(如果您发布了它,我们也会看到,但您没有发布)。我认为您甚至不需要本地的
dlgObject。看来您想更新最初启动此线程的对话框。
标签: c++ multithreading visual-studio-2010 mfc