Zugriff auf Dialog aus anderer Klasse syncronisieren.



  • In meinem Programm befindet sich eine Dialogklasse (Class D und eine weitere Klasse die darauf zugreift Class A.

    Nun rufe ich aus Class A die in einem Thread läuft eine Funktion F von Class D auf. Diese Funktion setzt wiederum einen Wert im Dialog.

    Nun wiederum wird genau in dem Moment der Dialog geschlossen und DestroyWindow aufgerufen. Der Dialg existiert nicht mehr. Nun wird aber noch die Funktion F ausgeführt. Und wenn dann gerade auf ein Controll im Dialog zugegriffen wird stürzt das ganze ab.

    Dass ich auf den Dialog nur zugreifen darf wenn er existiert ist klar. Aber wie löse ich dass, wenn ich schon in der Funktion bin und der Dialog wird beendet.



  • ganz einfach benutze eine User-Message und sende eine Nachricht mit PostMessage an deinem Dialog. Im Nachrichten-Handler kannst du dann die Aktualisierung deines Dialoges durchführen. Abstturz gibts dann auch niocht mehr weil halt die nachricht nicht mehr zugestellt wird.

    Nie aus einen Thread auf funktionen oder Variablen des dialoges zugreifen, das is tötlich


  • Mod

    Man sollte niemals aus einem fremden Thread heraus Fensterfunktionen aufrufen die zu Fenstern gehören, die von dem anderen Thread erzeugt wurden.

    CTecS hat recht.
    Versuche das Ganze möglichst durch nachrichten mit PostMessage zu entkopplen.



  • Ok, da stellt sich für mich aber noch eine schwierigkeit. Wie läuft das mit den Parametern. Ich übergebe einen Zeiger auf eine Variable. Wann lösche ich die Variable.



  • y-vonne schrieb:

    Ok, da stellt sich für mich aber noch eine schwierigkeit. Wie läuft das mit den Parametern. Ich übergebe einen Zeiger auf eine Variable. Wann lösche ich die Variable.

    na du hast doch den LPARAM und den WPARAM als Übergabe entweder du übergibst einen zeiger in LPARAM und der Empfänger löscht dann, oder wenn das nur ein WORD- oder LONG-Wert ist übergibst du das direkt. Über den LPARAM kannst du selbst einen Zeiger auf eine ganze Struktur Übergeben.



  • na du hast doch den LPARAM und den WPARAM als Übergabe

    Klar. Das habe ich ja auch nicht gefragt.

    übergibst einen zeiger in LPARAM

    kann ich auch in WPARAM oder nicht?

    und der Empfänger löscht dann

    Und was ist wenn der Empfänger gar nicht mehr empfängt. Du schreibst ja

    ... weil halt die nachricht nicht mehr zugestellt wird.

    Wer löscht dann?


Anmelden zum Antworten