Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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:

Geschrieben
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.

Geschrieben
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!

Geschrieben

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.

Geschrieben
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?

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...