我在VC ++ / MFC应用程序的主线程中有一个 vtkDICOMReader 。因为在该对象中检索数据可能需要很长时间,所以我想将数据(例如从HDD)获取到单独的线程中。在第二个线程中,我创建另一个 vtkDICOMReader 对象。而这个 vtkDICOMReader 应该从主线程转移到 vtkDICOMReader ...我该怎么做?
种类的伪代码:
CMyDoc::m_pDICOMReader;
在第二个线程中,我使用
创建一个本地 vtkDICOMReadervtkDICOMReader* pReader = vtkDICOMReader::New();
pReader->ReadData(...); // could take long time
::PostMessage(AfxGetMainWnd()->GetSafeHwnd(), WMU_TRANSFER, 0, (LPARAM)pReader);
在主线程中:
LRESULT CMyDoc::OnTransfer(WPARAM wParam, LPARAM lParam)
{
vtkDICOMReader* pReader = (vtkDICOMReader*)lParam;
// transfer pReader to m_pDICOMReader somehow ...
m_pDICOMReader = pReader; // <-- this is the point where I don't know how to transfer data from pReader to m_pDICOMReader
pReader->Delete();
}
或者,为避免这种转移,我可以从单独的线程 vtkImageData 到主线程 vtkImageData ,我可以直接将数据加载到 vtkImageData 线程可以取消读取输入数据的方式?如果可能的话,我该怎么办?