c ++ - MFC app 'Reagerer ikke', selvom beregningen allerede er i separat tråd

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg fandt ikke tilstrækkeligt svar til dette, ethvert forslag er velkommen ..
Jeg har en enkel MFC single-document app, ved åbning fil en lang beregning finder sted i separat tråd:


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);
}


Tråden er startet som denne:


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;
}


I første omgang virker opdateringen af ​​statuslinjen med jævne mellemrum, men efter 10-15 sekunder standser opdateringerne, og 'Ikke svarende' vises i app titel.
Jeg har forsøgt at starte tråden med lavere prioritet, og også tilføjet periodisk SwitchToThread () (altid retur 0) og Sove (50) inde i ParseFile (), men det hjælper ikke.


Jeg tror jeg gør noget forkert, men kan ikke finde ud af hvad


Tak for at læse dette!

Bedste reference