Gui hängt wenn Thread läuft



  • Hallo,

    ich Programmiere gerade eine Anwendung welche eine Thread startet, dieser Verbindet sich dann zu einem Server und übergibt etwas, das passiert in einem Thread, der aktuelle Status wird in der Gui dargestellt (Object x von y) das Funktioniert auch ohne Probleme.

    Das Größte Problem ist das z.B. der Button beenden in der gui nicht mehr Funktioniert, weil wie ich meine, der Prozess "Gui" keine Systemzeit mehr bekommt.

    Mit folgendem Code erzeuge ich den Thread:

    for (int i = 0; i < m_nAnzahl; i++)
            {
               h = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread_start, (LPVOID)NULL, 0, &dwThreadID); 
               dw = WaitForSingleObject(h, 20);
               while (dw != NULL)
               {
                   Sleep(50);
                   dw = WaitForSingleObject(h, 50); //Warte ob Thread fertig ist
                   if (dw == NULL)
                   {
                        nCounter++;
                        RefreshStatus(nCounter); //Aktualisiere Statusbar
                   }
               }
    
            }
    

    Währe nett wenn mir jemand eine Idee hat, vielen Dank.

    P.s. es ist das erstemal das ich etwas mit threads mache bitte über den Code nicht wundern 🙂



  • Die GUI kann erst dann auf weitere Eingaben reagieren, wenn ein Handler abgearbeitet ist - und dadurch, daß du auf den Thread wayrtest, blockierst du effektiv das gesamte Programm (eigentlich genau das Problem, das durch den Thread vermieden werden sollte).

    Die Lösung: Diese Funktion sollte den Thread nur anstoßen und sich dann beenden. Das Warten auf das Thread-Ende solltest du woanders erledigen (z.B. in der OnIdle()-Methode - oder der Thread schickt eine Nachricht zurück, wenn er fertig ist).



  • Vielen Dank für deine Antwort,

    werde das dann dementsprechend anderst machen!


Anmelden zum Antworten