Narf! Geschrieben 6. November 2006 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?
Hexagon Geschrieben 6. November 2006 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:
Klotzkopp Geschrieben 6. November 2006 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.
Hexagon Geschrieben 6. November 2006 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!
Narf! Geschrieben 7. November 2006 Autor 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.
Klotzkopp Geschrieben 7. November 2006 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?
Narf! Geschrieben 7. November 2006 Autor Geschrieben 7. November 2006 DAS GANZE HALT! Ich habe das Projekt neu erstellt und nun geht es.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden