In GUIThread 20s operation durchführen, wie auslagern?



  • Hallo Leute

    Ich habe eine Windows/GUI Applikation. Wenn die Applikation geschlossen werden soll, soll zunächst eine etwas heftige Operation durchgeführt werden. Dies kann ca. 20Sek. dauern.

    Diese Funktion möchte ich nun natürlich in einen Thread auslagern, damit mein GUI nicht blockiert wird. Aber.... wenn ich den Thread ausführe, dann geht mein Meinprogramm weiter (also ist dann fröhlich am 'sich beenden'). Ich muss also im GUI-Code beim Threadaufruf trotzdem warten.... Wie kann ich das bewerkstelligen, damit mein GUI nicht stehen bleibt?

    Closing(){
     thread.Create();
     thread.Run();
    
     // wait till thread is finished. but how?
    
     CloseApplication();
    }
    

    ein Ansätz wäre jetzt z.b. mittels 'WaitForSingleObject' - aber das hat irgendwie nicht so richtig funktioniert (vielleicht auch nur versch*** implementiert).

    Hoffe, jemand kann mir hier Rat geben



  • Das Problem ist, das WaitForSingleObjekt den "Hauptthread" blockiert und deine Anwendung scheint nicht mehr zu reagieren (wird z.B. nicht neu gezeichnet). Du könntest aber z.B. den Code, der das Programm beendet, in eine Andere Funktion auslagern (Prg. wird nicht in der Schließen Fkt. beendet). Dann sendest du vom Thread aus mit ::PostMessage eine Nachricht an dein Hauptfenster das der Thread fertig ist. Und in der Funktion, welche diese Nachricht bearbeit, beendest du dann das Programm.



  • Du könntest natürlich auch das Hauptfenster einfach vorher verstecken (ShowWindow(False)).


Log in to reply