首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

,AfxBeginThread 创建的线程,为何执行的顺序有有关问题呢

2013-07-04 
求助,AfxBeginThread 创建的线程,为何执行的顺序有问题呢?本帖最后由 VisualEleven 于 2013-06-18 15:21:3

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

热点排行