Progressbar / Fortschrittsanzeige und Worker-Thread
-
Hallo allerseits,
ich habe ein Problem (bin VC++ Neuling...).
Meine Applikation kopiert Daten und ist einige Zeit damit beschäftigt. Nun würde ich gerne eine Fortschrittsanzeige (Progressbar) implementieren.Die Applikation schreibt die Anzahl der bearbeiteten Dateien in eine DWORD-Variable. Beim starten des Worker-Threads übergebe ich einen Zeiger auf diese Variable (nur lesen). Der Worker-Thread nimmt den Wert und setzt die neue Position der Progressbar, anschließend legt er sich für 1000ms schlafen (Sleep()), so dass die Anzeige jede Sekunde aktualisiert werden soll. Der Kopier-Vorgang dauert insgesamt knapp eine Minute.
Mein Problem ist, dass die Progressbar nicht "läuft", vermutlich da das Hauptprogramm ja beschäftigt ist und somit die Anzeige nicht aktualisiert wird.
Daher meine Frage: Kann das überhaupt gehen? Kann der Worker-Thread das zeichnen des neuen Progressbar-Zustandes überhaupt veranlassen?
Vielen Dank für Tipps
Nobodytwo
-
Klar kann er das veranlassen. Wenn Dein Hauptthread nicht laufen würde, dann würde Dein Worker stehen bleiben, denn dann könnte Deine Nachricht nicht ausgeliefert werden.
-
Vielen Dank für den Hinweis.
Gibt es hierzu irgendwo ein Beispiel, bzw. welche Funktion nutzt der Worker-Thread um die Ausgabe zu veranlassen?
Über eine Nachricht kann es eigentlich nicht gehen, da der Hauptthread ja knapp 1min. in seiner Schleife "hängt" und auf keine Ereignisse in dieser Zeit reagiert.
Ich suche also nach einem Tipp, wie der Worker-Thread jede Sekunde einmal die Progressbar auf dem Hauptfenster aktualisieren kann, wenn der Hauptthread in dieser Zeit in einer Funktion beschäftigt ist und keine Nachrichten abarbeiten kann.Noch einen schönen Feiertag
-
Dann machst Du einen Fehler. Wenn der Hauptthread eine Shleife machtund wartet, dann brauchst Du keinen zweiten Thread. Der Mainthread sollte weitr Nachrichten abarbeiten.
-
Tausche doch die Aufgaben, lasse den workerthread die dateien kopieren und den hauptthread die ANzeige, nur so macht es Sinn. Den Status kannst du über eine Message an das hauptfenster senden und fertig
Gruß Matthias