读书人

AfxBeginThread 创建的线程为何执

发布时间: 2013-07-04 11:45:28 作者: rapoo

求助,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等子线程执行后,在运行主线程。这样子线程的进度条窗口和主线程都在同时协调处理.

读书人网 >VC/MFC

热点推荐