Autor Beitrag
simlei
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

WIN XP
D7
BeitragVerfasst: Do 26.07.07 12:49 
Ja, die Frage ist einfach... ich möchte während eine sehr lange Berechnung läuft, mir eine Variable o.ä. per Edit oder ProgressBar o.ä. ausgeben lassen. Dabei soll keine erzwungene Verzögerung (Sleep) dabei sein; auch hatte ich bemerkt dass Application.ProcessMessages; ziemlich langsam sein kann. Also, es sollte eine performante Lösung sein (wenn ich mich geirrt habe mit ProcessMessage, bitte hinweisen)
thanks in advance :)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 26.07.07 12:53 
Moin!

user profile iconsimlei hat folgendes geschrieben:
Dabei soll keine erzwungene Verzögerung (Sleep) dabei sein; auch hatte ich bemerkt dass Application.ProcessMessages; ziemlich langsam sein kann. Also, es sollte eine performante Lösung sein

In diesem Fall bleibt nur übrig, die Berechnung in einen eigenen Thread auszulagen und entweder von diesem aus regelmäßig den Fortschritt zu melden oder eine (am besten synchronisierte) Statusvariable des Threads zu definieren, die du in der Anwendung abfragen kannst. :idea: ;)

Falls dir das zu aufwändig sein sollte oder du Probleme mit Threads hast - dann würde ich mir das mit dem APM doch nochmal durch den Kopf gehen lassen... :P

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 26.07.07 12:54 
Möglichkeit 1: Application.ProcessMessages aufrufen. Aber nicht zu oft, sonst bremst das wirklich. Wenn es um eine Fortschrittsangabe in Prozent geht, dann irgendwie so hinbiegen, dass APM nur ca. 100 mal aufgerufen wird. Das reicht als Feedback aus und dauert nicht zu lange.
Möglichkeit 2: Die Berechnung in einen Thread auslagern und ab und zu die Anwendung über den Fortschritt informieren. Z.B. über Synchronize, ein ausgelöstes Event oder eine Message.

_________________
We are, we were and will not be.
simlei Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

WIN XP
D7
BeitragVerfasst: Do 26.07.07 13:00 
an Threads hatte ich auch gedacht, aber dann entschlossen, dass das jetzt zu aufwändig ist :D
also entnehme ich, dass A.PM die einzige andere Möglichkeit ist? Dann werde ich es eben nur alle 50mal aufrufen, daran hatte ich nicht gedacht...
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: Do 26.07.07 14:16 
Nimm einen Thread.
So aufwändig ist das wahrscheinlich nicht,
und außerdem wirst du froh sein, wenn du die Trennung gemacht hast,
weil du dann Berechnung und Darstellung sauber getrennt hast, was meistens
vorteilhaft ist.