我有以下代码:
void COrganizerProgressDlg::LaunchWorkerThread()
{
CWorkerData data;
data.m_pWndOrganizerProgressDlg = this;
data.m_pWndImageOrganizerDlg = m_pWndImageOrganizerDlg;
::AfxBeginThread(RunBackgroundWorker, &data);
}
这是我的RunBackgroundWorker()
方法,这是static
方法。
UINT COrganizerProgressDlg::RunBackgroundWorker(LPVOID pParam)
{
try
{
// Run organizer engine
COrganizerEngine engine(m_nNotifyMessage, (CWorkerData*)pParam);
engine.Run();
}
catch (CException *e)
{
e->ReportError();
e->Delete();
}
return 0;
}
数据用于初始化我的工人类中的设置。
问题是我的data
变量在调用AfxBeginThread()
之前包含有效数据,但似乎在RunBackgroundWorker()
中包含垃圾。
我错过了什么?如何从工作线程访问此数据?
答案 0 :(得分:3)
data
是具有自动存储持续时间的对象。一旦超出范围,它就不再有效。我假设,data
在工作线程有机会获取信息之前超出范围。
要解决这个问题,基本上有两个选择:
new
分配CWorkerData
实例并将地址传递给工作线程。然后,工作线程可以在完成对象时调用delete
。