WaitForMultipleObjects und SetWindowText oder ähnlichem



  • Ich habe ein Thread der Aktualliesiert meinen Dialog. Der Funktioniert auch gut.

    Nun mein Problem:
    Ich möchte, das mein Thread zuendeleuft bevor der Dialog geschlossen wird.
    Also warte ich in OnDestroy auf meinen Thread mit WaitForMultipleObjects.
    Leider warte ich da unendlich.
    Da wenn ich in meinen Thread zB. eine Funktion wie z.B.: SetWindowText (GetFirstSelectedItemPosition, GetTopIndex,..) auftrufe, da hängen bleib.

    Wie so hängen alle Funktionen wie SetWindowText, wenn ich zuvor WaitForMultipleObjects aufgerufen hab?

    Ich hab keine Idee, ich denk mal dafür fehlt mir einwenig Hintergrundinformationen zu Threads.
    Kann das sein das SetWindowText ein MultipleObject ist aber wie so hängt es sich dann weg?

    Würde mich echt über eine anregende Idee freuen, da ich ansonsten WaitForMultipleObjects vergessen kann und viele Speicherlags bekommen werde.



  • Nu, is doch ganz einfach. Du hast Fenster F1 in Thread T1 erstellt. Somit werden alles Messages für das Fenster auch in T1 verarbeitet. Sendet jetzt Thread T2 seine Messages an das Fenster, so werden diese auch von T1 verarbeitet. Dieser hängt aber in WaitForMultipleObjects fest.
    Lösung:
    MsgWaitForMultipleObjects verwenden



  • Ah ha Danke für die Antwort.

    Verstehe nur nicht wofür dwWakeMask ganz genau ist. Da steht ja:

    dwWakeMask
    [in] Input types for which an input event object handle will be added to the array of object handles. This parameter can be any combination of the following values.

    Also wenn ich QS_ALLEVENTS nehme ist es quasi wie WaitForMultipleObjects. So verstehe ich das. Also müße ich doch eigendlich QS_ALLEVENTS ^ QS_PAINT nehmen. Dann müße ich doch wider SetWindowText beutzen können.
    Bis jetzt funtkioniert das aber nicht, werd noch mal bischen rumprobieren.



  • Oh genau falschrum verstanden.

    Hab QS_PAINT eingesetzt. Scheint zu FUnktionieren.

    Vielen Dank RenéG



  • Naja ich will ka nicht nerven. Aber irgenwie bekomme ich das doch nicht hin mit dem dwWakeMask. Also was muß ich nun da einsetzen. Funktioniert zwar mit QS_PAINT aber irgenwie nicht so wie ich das will.
    Dann gehts nur weiter, wenn ein WM_PAINT kommt.

    Mag mich das jemand freundlicher weise erklären?


Anmelden zum Antworten