Veröffentlicht 1. August 200520 j Hallo, ich habe noch nicht sehr viel mit SDI gearbeitet. Daher fehlt mir da etwas Erfahrung. Mein Problem: Ich möchte in meinem Projekt eine Progressbar und eine Uhr in die Status Leiste einbringen. Habe das auch alles schon hinbekommen, nur leider funktioniert das überhaupt nicht über einen Thread. Das heißt wenn ich die Uhr laufen lasse oder die ProgressBar, dann bleibt mir ja die Anwendung für den Zeitraum hängen. Ist mir Klar. Daher ja auch ein Thread... Was ich nicht verstehe, ist das ich aus dem Thread nicht auf CMainFrame zugreifen darf. Habe schon alles mögliche versucht. Vielleicht seht Ihr ja den Fehler oder habt eine Lösung... Wenn ich SendTextToStatusbar aufrufe geht es ja auch. Warum dann nicht aus dem Thread??? void CMyViewDlg::SendTextToStatusbar(int iIndex,CString csText) { ((CMainFrame *)(theApp.m_pMainWnd))->SendTextToStatusbar(iIndex,csText); } bool CMyViewDlg::MyThreadControl() { DWORD pdwTimeThreadId; LPVOID pParam; pParam = (LPVOID)this; m_hTimeThread = CreateThread(NULL, 0, TimeThread, pParam, NULL, &pdwTimeThreadId); return true; } //Thread DWORD WINAPI TimeThread(LPVOID pParam) { try { CMyViewDlg * pThis = (CMyViewDlg *) pParam ; while(true) { pThis->SendTextToStatusbar (0, _T(_T(“Testâ€)); } } catch(CException *e) { char tmp[256]; e->GetErrorMessage(tmp, sizeof(tmp)); CString csTmp(tmp); e->Delete(); } catch(...) { } return 0; } [/PHP]
7. August 200520 j Generell ist es nicht sicher, MFC-Methoden aus einem anderen Thread als dem, der das Fenster erstellt hat, aufzurufen. Es geht zwar oft gut (was hauptsächlich daran liegt, dass viele MFC-Methoden nur hauchdünne Wrapper um die WinAPI sind), aber manches eben nicht (z.B. UpdateData). Im Zweifelsfall ist es immer besser, aus dem Thread eine Message an irgendein Fenster zu senden, und dort die gewünschte Aktion auszulösen. Wie sieht denn CMainFrame::SendTextToStatusbar aus?
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.