Ich schreibe unter anderem an ein paar Projekten, in denen große Mengen Daten eingelesen und analysiert werden (ein Durchlauf kann 10 Minuten dauern).
In Delphi habe ich immer textfelder mit dem Status gefüllt und ab und an "refresht" um den Nutzer anzuzeigen, dass noch was passiert.
Ähnliches habe ich für Graphen gemacht, in denen ich Zwischenergebnisse geplottet habe. (z.B. image1.refresh)
Wenn ich mit solchen Befehlen unter OS-X compiliere passiert gar nix.
Dasselbe Projekt under W7 kompiliert macht das was ich will.
Was läuft hier falsch?
Ede
Updates der Form funktionieren nicht
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Updates der Form funktionieren nicht
Edwa hat geschrieben:ein Durchlauf kann 10 Minuten dauern
Nur?! Nach meiner Erfahrung können das keine großen Datenmenge oder keine komplexen Analysen sein
Edwa hat geschrieben:Wenn ich mit solchen Befehlen unter OS-X compiliere passiert gar nix.
Dasselbe Projekt under W7 kompiliert macht das was ich will.
Versuch mal Application.ProcessMessages; nach dem Refresh aufzurufen. Wenn das keine Abhilfe schafft, könnte das ein Bug sein, den du gerne im Bugtracker eintragen darfst (dann wäre ein Minimalbeispiel hilfreich). Andernfalls sollten Threads die Problemstellung beseitigen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 167
- Registriert: Mo 20. Okt 2008, 20:50
- OS, Lazarus, FPC: macOS 10.4-13.4, Windows 2000-11, Raspbian (L 2.2.6, FPC 3.2.2)
- CPU-Target: PowerPC, Intel, ARM
- Wohnort: Hattingen, NRW
- Kontaktdaten:
Re: Updates der Form funktionieren nicht
Ich würde dringend empfehlen, eine derart komplexe Berechnung mit MultiThreading zu realisieren, d. h. die Rechnung läuft in einem Thread, die Benutzeroberfläche in einem anderen. Dann bleibt das Programm während des Laufs benutzbar und die Berechnung kann auf Wunsch auch angehalten oder abgebrochen werden.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Updates der Form funktionieren nicht
Eigentlich könnt ich ja helfen, aber der smiley nervt mich
1. Das Problem liegt bei dir.
2. Bleib doch bei Delphi
1. Das Problem liegt bei dir.
2. Bleib doch bei Delphi
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Updates der Form funktionieren nicht
Für solche Fälle nutze ich:
und das natürlich am besten in einem Thread!
ODER
Ich nutze eine Konsolen-Anwendung oder Daemon im Hintergrund für mich erscheint es nicht sinnvoll eine Auswertung (z.B. was bei mir häufig vorkommt Logfile-Auswertung) in einer GUI-Anwendung auszuführen! Eine GUI-Anwendung verbraucht viel zu viel Zeit fürs Repaint etc., mit Write(Ln) gebe ich dann zwischendurch an was im Augenblick passiert, ob auf Konsole oder in eine Logging Datei!
Ach so ja, ich stelle seit ca. 2 Jahren so langsam all meine Projekte auf Free Pascal / Lazarus um, lediglich das erzeugen von Active-X Objekten passiert noch unter Delphi (hoffentlich das auch nicht mehr lange) und Aktualisierung uralter Software wo eine Portierung hoffentlich keinen Sinn mehr macht, also der Schritt nach Delphi wäre für mich ein Schritt zurück, besonders unter dem Gesichtspunkt der Flexibilität!
Code: Alles auswählen
Statusbar: TPanel;
edtStatusBar: TEdit;
ProgressBar: TProgressBar;
...
ProgressBar.Position := 0;
ProgressBar.Max := iMax;
...Loop...
ProgressBar.Position := iAct;
edtStatusBar.Text := info;
edtStatusBar.Repaint;
Application.ProcessMessages;
...Loop End...
und das natürlich am besten in einem Thread!
ODER
Ich nutze eine Konsolen-Anwendung oder Daemon im Hintergrund für mich erscheint es nicht sinnvoll eine Auswertung (z.B. was bei mir häufig vorkommt Logfile-Auswertung) in einer GUI-Anwendung auszuführen! Eine GUI-Anwendung verbraucht viel zu viel Zeit fürs Repaint etc., mit Write(Ln) gebe ich dann zwischendurch an was im Augenblick passiert, ob auf Konsole oder in eine Logging Datei!
Ach so ja, ich stelle seit ca. 2 Jahren so langsam all meine Projekte auf Free Pascal / Lazarus um, lediglich das erzeugen von Active-X Objekten passiert noch unter Delphi (hoffentlich das auch nicht mehr lange) und Aktualisierung uralter Software wo eine Portierung hoffentlich keinen Sinn mehr macht, also der Schritt nach Delphi wäre für mich ein Schritt zurück, besonders unter dem Gesichtspunkt der Flexibilität!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me