threads + zugriff auf steuerelemente



  • Hallo

    Folgendes Problem: Es existiert ein Dialog mit ein paar Steuerelement, z.B. ein Editfeld.
    Es wird ein neuer Thread aufgemacht in dem irgendwas passiert. Der thread kennt die aufrufende applikation durch Pointerübergabe. Über den Pointer kann er sich bis zum Dialog durchhangeln und führt dort eine Funktione aus, die z.B. am Ende UpdateData() ruft. Folge: Absturz!

    Anscheinend kann man aus Threads nicht auf Afx-Steuerelement mehr zugreifen. Gibt es dafür einen Workaround?

    Danke
    Stean



  • Schick mit PostMessage ne benutzerdefinierte Nachricht an den Dialog und lass ihn mit ner Methode selber machen was du bislang vom Thread aus machen wolltest.

    MfG Spacelord



  • Das Problem ist der Zugriff des Threads auf die CWnd oder CDialog abgeleiteten Zeiger, die sind nämlich in der Regel nicht Thread-Safe (s. MSDN Doku).

    Du musst Dir die HWND Handles der jeweiligen Fenster holen und an diese mit SendMessage oder PostMessage User-Defined Messages versenden.

    In der anderen Richtung kannst Du dem Thread selbst auch Nachrichten schicken, z.B. mit PostThreadMessage()

    Als Workaround müsste klappen, das HWND des Dialogs und die CTRL-ID des Edit-Controls mit ::GetDlgItemText() zu benutzen.

    Dennis.



  • Du kannst vom Thread aus das Steuerelement selbst verwenden. Einfach reinschreiben. Set WindowText
    Auch wird eine Nachricht ausgelöst die das Steuerelement empfängt.


Anmelden zum Antworten