Listenelemenet aktualisieren
-
Hallo,
eine Funktion bruacht sehr lange (ca. 30 min) um etwas zu berechnen. Zwischenergebnisse werden dabei in einem Listenelement protokolliert.Ich habe nun das Problem, dass erst alle Ergebnisse angezeigt werden, wenn die Funktion durchgelaufen ist. Wie kann ich die Ergebnisse im Listenelement sofort anzeigen lassen, wenn sie eingetragen werden?
Grüße,
Michael
-
Indem du die eigentlichen Berechnungen in einen Extra-Thread auslagerst - damit hat das Hauptprogramm Zeit, die neuen Zwischenergebnisse auch darzustellen (und im Notfall auch auf einen Abbrechen-Button zu reagieren).
-
Du mußt dem System Rechenleistung zur verfügung stellen (sleep z.b.) und dann mußt Du den MFC Messageloop abarbeiten. Also entweder Du packst deine Zeitraubende Routine in einen Thread und überträgst die Daten in dein Window oder Du fügst einen Messageloop in deine Routine ein
MFC Messageloop
MSG msg; while( ::PeekMessage( &msg, NULL, NULL, NULL, PM_NOREMOVE ) ) ::AfxGetThread()->PumpMessage();so in groben zügen. Also so lange deine Funktion läft, und diese keine Zeit an das System zurückgibt wird deine Anzeige nie aktualisiert.
Gruß Matthias
-
Da ich gerade ein ähnliches Problem habe...
Geht das Aktualisieren dann insgesamt schneller?
Ich lade Einträge aus einer Datenbank und das dauert mittlerweile bei 800 Zeilen 6 Sekunden.

Und das obwohl ich das Neuzeichnen pro Zeile schon ausgeschaltet habe.
-
Klasse, Frage beantwortet!
Vielen Dank!
-
das kommt darauf an wie du die Daten aus der DB liest, und das 2. ist wenn du 800 einträge irgendwo auf einmal reinschreibst, benötigt das natürlich auch seine zeit.
Wird dir jetzt nicht viel weiterhelfen, aber ich hab auch nicht mehr infos zu deinem Problem
Gruß Matthias
-
Also, die Lösung hier aus dem Thread ist nichts für mich.

Ich kann nun zwar nach dem Speichern gleich weitertippen - aber nach dem Laden löscht der mir meine Eingabe (weil ich das Feld nach dem Speichern leere).Also weitersuchen, ich hab noch ein zwei Sachen im Kopf, aber je einfacher (weniger Code) eine Lösung ist, desto lieber ist sie mir.
