schorschi Geschrieben 2. Juli 2007 Geschrieben 2. Juli 2007 Hallo, ich möchte in einem Thread einen Dialog öffnen und per ProzessBar den Bearbeitungszustand anzeigen lassen. Hat der Thread seine arbeit erledigt wird der Dialog im Thread geschlossen. Solange ich nur einen Thread gestartet habe, kein Problem. Laufen zwei Threads gleichzeitig, Absturz. Ich denke mal da Sie auf die gleiche Resource zugreifen. Den Dialog starte ich so: CDiaProzessBar *m_DiaProzessBar = new CDiaProzessBar(); m_DiaProzessBar->Create(CDiaProzessBar::IDD); m_DiaProzessBar->ShowWindow(SW_SHOW); ... Kann mir jemand sagen, wie ich in Threads mehrere Dialoge der gleichen Recource starten kann ? Gruß Zitieren
Klotzkopp Geschrieben 3. Juli 2007 Geschrieben 3. Juli 2007 Die mehrfache Verwendung der Ressource ist nicht das Problem. Wie hast du den Thread denn überhaupt gestartet? Als Workerthread oder als UI-Thread? Und könntest du "Absturz" noch ein wenig präzisieren? Welcher der Threads stürzt ab? Fehlgeschlagene Assertion? Schutzverletzung? Genaue Fehlermeldung? Callstack? Zitieren
schorschi Geschrieben 3. Juli 2007 Autor Geschrieben 3. Juli 2007 Also gestartet als Workerthread mit: AfxBeginThread(Funktionsname,this, THREAD_PRIORITY_NORMAL, 0, 0, NULL); Ein Absturz beschieht dann sobald der zweite Thread bei CDiaProzessBar *m_DiaProzessBar = new CDiaProzessBar(); m_DiaProzessBar->Create(CDiaProzessBar::IDD); ankommt, was sich ja innerhalb der Threadfunktion befindet Fehlgeschlagene Assertion? Schutzverletzung? Callstack? Bahnhof ?!? Kannst Du die noch an die PN erinnern ? :confused: soweit bin ich leider nicht mit der Entwicklungsumgebung das ich da 'ne qualitative Auskunft geben kann, oder anders, isch ham kene Ahnung... Ich weiß wohl das es Unterscheidungen zwischen Worker- und Oberflächenthreads gibt, aber da ist schon wieder Ende im Gelände. Zitieren
Klotzkopp Geschrieben 3. Juli 2007 Geschrieben 3. Juli 2007 Also gestartet als WorkerthreadDas ist schon der Fehler. Workerthreads dürfen keine MFC-Fenster öffnen. Ich weiß wohl das es unterscheidung zwischen Worker- und Oberflächenthreads gibt, aber da ist schon wieder Ende.Um einen UI-Thread zu starten, musst du die andere Überladung von AfxBeginThread benutzen, die mit einem CWinThread-(oder davon abgeleiteten-)Objekt. Aber warum erstellst du den Dialog eigentlich nicht im ursprünglichen UI-Thread? Zitieren
schorschi Geschrieben 1. August 2007 Autor Geschrieben 1. August 2007 Hat etwas gedauert. Ich wollte den Dialog, eine Prozesssbar, als optisches Mittel nutzen damit der User weiß wie weit die Arbeit des Threads erledigt ist. Aktuell habe ich das roblem umgangen, ich laße es mit dem Dialog. Aber irgendwann muß ich da sowieso mal ran, von wegen GUI thread. Danke für die Antworten 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.