MFC app" Not Responding",尽管计算已经在单独的线程中

时间:2017-09-26 09:39:28

标签: c++ windows multithreading visual-c++ mfc

我没有找到足够的答案,欢迎提出任何建议。 我有一个简单的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),但它没有帮助。

我想我做错了什么,但无法弄明白

感谢您阅读本文!

0 个答案:

没有答案