Thread soll auf mehrere Dialoge zugreifen können



  • Hallo liebe Leut',

    habe einen workthread, der auf den Hauptdialog zugreifen kann:

    CWinThread *m_pWinThread;
    m_pWinThread = AfxBeginThread(AFX_THREADPROC(CleanUp), LPVOID(this));
    .
    .
    .
    
    static UINT CleanUp(LPVOID pParam)
    {
    CCleanUpWin32Dlg		*Dlg = (CCleanUpWin32Dlg *) pParam;
    .
    .
    .
    

    Nun möchte ich aber noch einen zweiten Dialog im Thread verwenden! Wie kann ich dem Thread einen entsprechenden Poitner zukommen lassen? Oder was muß ich da noch einbauen? 😕

    Vielen Dank schon mal für Eure Antworten!



  • einfach eine struktur übergeben ....

    struct MY_DLGS{
    void* dlg1;
    void* DLG2;
    .
    .
    .
    }

    static UINT CleanUp(LPVOID pParam)
    {
    struct MY_DLGS* dummy = (MY_DLGS*) pParam;

    CCleanUpWin32Dlg *Dlg = (CCleanUpWin32Dlg 😉 dummy->dlg1;
    .
    .



  • Danke für die Antwort! Aber die Lösung scheint das nicht zu sein. In Deinem Code müßte ich die Structur übergeben, aber Du hast immer noch pParam als Übergabevariable drin stehen. Damit kann aber nur ein Zeiger auf einen Dialog übergeben werden!?! Und die Übergabe eines structs führt zu Fehlern...
    😕


  • Administrator

    Schon mal überlegt die Struktur auf dem Heap zu erzeugen und dann den Zeiger der Struktur übergeben? Im übrigen könntest das auch im Code von LEO_III selber lesen. Er konvertiert pParam zu einem MY_DLGS-Zeiger. Am Ende aber das löschen der Struktur nicht vergessen, wenn sie auf dem Heap erstellt wurde!

    Grüssli



  • Alter der Code funktioniert 100 % wenn Du willst sende ich Dir ein Beispiel. Du kannst immer Adressen übergeben!!! Da spielt es keine rolle ob es die Adresse eines Dialoges einer routine oder einer Struktur ist. Eine Adresse ist bei den 32 bit Prozessoren immer 4 Bytes und das warst. Es interessiert den Code oder den Copiler nicht worauf diese Adresse verweist. schick doch mal den Code von Dir der nicht funzt bidde ...
    bis denne


Anmelden zum Antworten