Narf! Geschrieben 6. November 2006 Teilen Geschrieben 6. November 2006 Hallo an Alle. Um an mehrere meiner Dialgfeld-Kontroll-Variablen (CListCtrl) in einem Thread heranzukommen, habe ich den this-Zeiger meines Dialoges übergeben (s.o.) und in der Thread-Funktion denn Zeiger interpretiert: static UINT Func(LPVOID lParam) { C[Programm]Dlg* hb=reinterpret_cast<C[Programm]Dlg*> (lParam); } Über hb-> komme ich an alle Variablen ran, der Thread läuft (füllt ein ListBox-Element) aber wenn ich das Programm beende kommt die Fehlermeldung: Run-Time Check Failure #2 - Stack around the variable 'dlg' was corrupted. dlg ist die Variable aus der [App].cpp, wo das Programm initialisiert wird und das OnClose() oder OnOK() verarbeitet werden. Wenn das so nicht geht, wie kann ich einem Thread mehrere Variablen übergeben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hexagon Geschrieben 6. November 2006 Teilen Geschrieben 6. November 2006 Moin, Wenn das so nicht geht, wie kann ich einem Thread mehrere Variablen übergeben? Am einfachsten? Über ein Struct. Eleganter? Eine Klasse mit Zugriffsmethoden! Edit: Achja, ein Reinterpret_cast ist immer die Holzhammermethode...:floet: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 6. November 2006 Teilen Geschrieben 6. November 2006 Edit: Achja, ein Reinterpret_cast ist immer die Holzhammermethode...:floet:Leider geht's aber hier nicht anders. Die Signatur für Threadfunktionen ist fest vorgegeben, und der void*-Parameter üblich. Narf!, das sieht eigentlich gut aus. Der Fehler lässt mich vermuten, dass du irgendwo in Speicher schreibst, der dir nicht gehört. Prüf bitte mal alle Arrays, auf die du in der Threadfunktion zugreifst, ob du nicht die Grenzen überschreitest. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hexagon Geschrieben 6. November 2006 Teilen Geschrieben 6. November 2006 Leider geht's aber hier nicht anders. Die Signatur für Threadfunktionen ist fest vorgegeben, und der void*-Parameter üblich. Ich weiß das da immer ein void-Pointer übergeben wird, aber per static_cast hat man immer noch die Möglichkeit einen Fehler zu entdecken. Per reinterpred_cast kann man ja sozusagen Autos als Äpfel verkaufen... Was mir gard wieder einfällt: Wenn du schon den Zeiger auf diesen Dialog hast so solltest du den Dialog per EndModalLoop(...) vor dem beenden des Threads schließen...so war's bei einem Problem von mir mal! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Narf! Geschrieben 7. November 2006 Autor Teilen Geschrieben 7. November 2006 Ich habe keine Arrays oder Zeiger (außer zum Dialog) in meiner Thread-Funktion. Den Dialog kann ich nicht mit EndModalLoop() schließen, da es sich um den Hauptdialog handelt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. November 2006 Teilen Geschrieben 7. November 2006 per static_cast hat man immer noch die Möglichkeit einen Fehler zu entdecken. Per reinterpred_cast kann man ja sozusagen Autos als Äpfel verkaufen...Wie soll denn ein static_cast bei einem void* einen Fehler entdecken können? static_cast würde hier genau dasselbe bewirken. Ich habe keine Arrays oder Zeiger (außer zum Dialog) in meiner Thread-Funktion.Aber irgendwo schreibst du im Speicher herum, wo du es nicht darfst. Benutzt du irgendwelche Member der Klasse in beiden Threads? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Narf! Geschrieben 7. November 2006 Autor Teilen Geschrieben 7. November 2006 DAS GANZE HALT! Ich habe das Projekt neu erstellt und nun geht es. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.