Fensteraufruf in Thread



  • So also ich hab nen Prog das mir Dateien raussucht und in einer Liste anzeigt. Nur kann das ja ein Stück dauern und so lange ist der ganze Dialog samt Nachrichtenschleife blockiert.
    Daher wollte ich das in einen Thread auslagern.

    Wie ist das nun, wenn ich dem Thread nen Zeiger auf den Dialog übergebe und dieser ne AddPath(const CString& path)-Methode hat?
    Ist das Threadsafe? Oder crasht das, wenn der Dialog gerade in einer anderen Funktion steckt, während der Thread den Pfad hinzufügen will?
    Alternative, besser Wege oder Vorschläge??

    MfG Pellaeon



  • Sende eine Usermessage an den Dialog das ist sicher und gib dem Thread das Handle auf den Dialog mit.
    Aus einem Thread würde ich keine Methode des Dlg aufrufen, kann 100 mal gut gehen und dan kracht es beim 101ten Mal.

    Gruß



  • CTecS schrieb:

    Sende eine Usermessage an den Dialog das ist sicher und gib dem Thread das Handle auf den Dialog mit.
    Aus einem Thread würde ich keine Methode des Dlg aufrufen, kann 100 mal gut gehen und dan kracht es beim 101ten Mal.

    Gruß

    joar aber wie übergeb ich dann den String? Zeiger mitschicken ist auch nicht grad das wahre



  • Hat wer Erfahrung mit CCritical Section?

    Wenn ich das Schreiben der Daten in meine Liste in der add-Funktion in so einem Bereich umschließe, ist dann gesichert, dass der nicht mit gerade anderen Nachrichtenbearbeitungen kollidiert?



  • Pellaeon schrieb:

    joar aber wie übergeb ich dann den String? Zeiger mitschicken ist auch nicht grad das wahre

    WM_COPYDATA
    Da ist eine schöne Anleitung auf Codeproject. 🙂



  • CCriticalSection ist doch trivial, oder???

    void AddString(LPCTSTR szValue)
    {
      m_m_myListCS.Lock();
      try
      {
        m_myList.Add(szValue);
      }
      finally
      {
        m_myListCS.Unlock();
      }
    }
    
    CCriticalSection m_myList;
    CStringList m_myList;
    

    Und zu beachten ist: Du musst jeden Zugriff auf die m_myList durch den obigen Code schützen!!!!!



  • Jochen Kalmbach schrieb:

    Und zu beachten ist: Du musst jeden Zugriff auf die m_myList durch den obigen Code schützen!!!!!

    Sowas hatte ich befürchtet. Das wollt ich nicht.

    Hab jetzt aber im "Inside Visual C++" was gefunden ohne Threads 😃
    Einfach die PeekMessage,TranslateMessage usw. in der "Arbeitdschleife" mit einfügen, so tut er nach jedem Durchlauf nach NAchrichten schauen und diese bearbeiten. Man muss halt Knöpfe deaktivieren und in der WM_CLOSE abfangen, ansonsten funzt das wunderbar!!


Anmelden zum Antworten