求助,AfxBeginThread 创建的线程,为何执行的顺序有问题呢?
本帖最后由 VisualEleven 于 2013-06-18 15:21:31 编辑
UINT CSTLViewerDoc::ReadProcessTry10(LPVOID pParam)
{
CReadProcessDlgread_dlg;
read_dlg.DoModal();
//exit(0);
return0;
}
我调用:
void CSTLViewerDoc::OnStlFilein()
{
CFileDialog dlg(TRUE,"stl",NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Stereo Lithograpic File(*.stl)|*.stl", NULL );
if(dlg.DoModal()==IDOK){
CWinThread*lpThread = NULL;
//我调用的地方,为了创建一个进度条的对话框
lpThread = AfxBeginThread(ReadProcessTry10, NULL, THREAD_PRIORITY_HIGHEST);
//lpThread->ResumeThread(); //这个打开也试过
CSTLModel* pSTLModel = new CSTLModel();
CString strName = dlg.GetPathName();
pSTLModel->LoadSTLFile(strName);
if(pSTLModel->IsEmpty())
delete pSTLModel;
else
m_Part.AddEntity(pSTLModel);
UpdateAllViews(NULL);
}
}
按理说没问题啊,但是为什么我的对话框产生总是得等到文件Load好了才创建呢?
文件50M还多,Load过程就假死…
多线程 对话框 STL
[解决办法]
那是你的代码里就没有等线程完全创建好。
你的主线程AfxBeginThread后,就LoadSTLFile去了,线程未必创建好.主线程很忙,界面假死正常的事情。
两种方法:1.主线程负责显示进度条进度,子线程负责LoadSTLFile;子线程处理完一个或几个文件,给主窗口发消息,进度条增加。
2.主线程负责LoadSTLFile处理,UI子线程来显示进度(这个用非模态对话框好), UI线程重新继承CWinThread类,写个新的线程类。
主线程AfxBeginThread后,waitforsingleobject等子线程执行后,在运行主线程。这样子线程的进度条窗口和主线程都在同时协调处理.