Babybaer Geschrieben 1. August 2005 Geschrieben 1. August 2005 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] Zitieren
Klotzkopp Geschrieben 7. August 2005 Geschrieben 7. August 2005 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? Zitieren
Babybaer Geschrieben 8. August 2005 Autor Geschrieben 8. August 2005 Habe das Projket noch aus anderen Aspekten verworfen und bin auf CDialog zurück. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.