我没有找到足够的答案,欢迎提出任何建议。 我有一个简单的MFC单文档应用程序,打开文件时会在单独的线程中进行冗长的计算:
BOOL CrhMonkeyDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
// Start working thread to process the file
m_rhFile.StartParseFile(lpszPathName);
//periodically check progress and update
int progress, lines;
while ((progress = m_rhFile.GetProgress()) < 1000) {
lines = m_rhFile.GetNumLines();
CString strProgress;
strProgress.Format(_T("%d lines, %d percent complete"), lines, progress);
pMainFrame->SetStatusBarText(strProgress);
Sleep(1000);
}
UpdateAllViews(NULL);
}
线程就像这样启动:
UINT ParseFileThread(LPVOID Param)
{
RhFile* rhFile = (RhFile*)Param;
rhFile->ParseFile();
return TRUE;
}
int RhFile::StartParseFile(LPCTSTR lpszPathName)
{
m_file.open(lpszPathName);
AfxBeginThread(ParseFileThread, this);
return 0;
}
最初它确实可以定期更新状态栏,但是在10-15秒后更新停止并且&#34;无响应&#34;出现在应用标题中。 我试图以较低的优先级启动线程,并且还在ParseFile()中添加了定期的SwitchToThread()(总是返回0)和Sleep(50),但它没有帮助。
我想我做错了什么,但无法弄明白
感谢您阅读本文!