Entwickler-Ecke

Sonstiges (Delphi) - Wie mache ich einen Prozess schneller?


code - Mi 08.06.11 20:28
Titel: Wie mache ich einen Prozess schneller?
Ich würde gerne einen Prozess beschleunigen sodass er schneller abläuft unzwar dieser:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
case combobox1.itemindex of
0:  begin Zeit:=now+10.0*(1.0/86400.0);
 while (now<=Zeit) do Application.processMessages;
 form1.show ;
 Zeit:=now+0.0000000000000000000000000000000000000000000000000000000001*(1.0/86400.0);
   while (now<=Zeit) do Application.processMessages;
   form1.Hide ;


Wie ihr seht habe ich schon etwas herumprobiert :

Delphi-Quelltext
1:
Zeit:=now+0.0000000000000000000000000000000000000000000000000000000001*(1.0/86400.0);                    


Aber der Prozess hat sich immer noch nicht verschnellert

Moderiert von user profile iconNarses: Beitragstext wiederhergestellt.


Gausi - Mi 08.06.11 20:51

Hallo und :welcome: in der Entwickler-Ecke

Ein Aufruf von Application.processMessages; dauert eine gewisse Zeit. Wenn du das in einer Schleife aufrufst, dann dauert das entsprechend länger.

Es sieht so aus, als wolltest du das Fenster nur für einen kurzen Moment angezeigt haben. Wie kurz soll das denn sein? Schneller als einige MMillisekunden wird das mit Windows vermutlich sowieso nicht gehen.

Und evtl. ließe sich dein Vorhaben über die Timer-Komponente eleganter lösen. Dort kann man ein Intervall angeben, und nach diesem Intervall wird dann eine entsprechende Aktion ausgelöst.


Delphi-Laie - Mi 08.06.11 21:28

user profile iconcode hat folgendes geschrieben Zum zitierten Posting springen:
Aber der Prozess hat sich immer noch nicht verschnellert :(


Wie auch?

Prozesse beschleunigt man, indem man ihre Priorität und/oder die ihrer Threads erhöht.


Gerd Kayser - Mi 08.06.11 21:58

user profile iconcode hat folgendes geschrieben Zum zitierten Posting springen:
Zeit:=now+0.0000000000000000000000000000000000000000000000000000000001*(1.0/86400.0);

Mein Eindruck: Da versucht uns jemand zu verarschen.


Hidden - Do 09.06.11 05:25

Moin,

Du kombinierst hier gerade zwei "Standard-Probleme", die Ungenauigkeit von Gleitkommazahlen bei Umrechnung ins Zweiersystem [http://www.delphi-forum.de/viewtopic.php?t=92562] und die limitierte Genauigkeit von Zeitmessungen am Computer [http://www.delphi-forum.de/viewtopic.php?t=56678].

lg,


Tranx - Do 09.06.11 05:37

Genauer als 1/1000 ms kann der Timer nicht arbeiten, was soll also dieser irre kleine Multiplikationsfaktor. Die Stellen auszuzählen habe ich echt keine Lust. Und die Rechengenauigkeit ist selbst bei extended sicher kleiner als dieses Additionsglied. Womit dann die im Quelltext angegebene Addition zu einer Addition now + 0.0 gerät.


jaenicke - Do 09.06.11 06:04

Mal davon ganz abgesehen:
Der Wert ist garantiert kleiner als ein Takt des Prozessors dauert. Dementsprechend ist es schon rein logisch absolut klar, dass die while-Schleife niemals zwei Durchläufe haben kann, da selbst die eigenen CPU-Befehle der Schleife schon länger dauern.


Delphi-Laie - Do 09.06.11 10:07

Die Veralberung war mir auch von Anfang an schlagartig klar, als ich den aberwitzigen Gleitkommawert erblickte, der bestenfalls in der Physik der Elementarteilchen und des Urknalls bedeutsam ist.

Moderator oder Administrator, bitte setzt jemand von Euch diesem Spuk hier ein Ende!


der organist - Do 09.06.11 11:45

Nebenbei ist der Quelltext grauenhaft formatiert




:rofl:


Gausi - Do 09.06.11 11:45

Man sollte auch nicht zu vorschnell mit solchen Aussagen sein. Im ersten Posting wird ja auch einigermaßen deutlich, dass user profile iconcode seinen Code selber nicht so ganz ernst nimmt und eher als verwzeifelten Versuch ansieht, sein Problem zu lösen.

Von daher bin ich sehr dafür, dieses Topic offen zu lassen.


der organist - Do 09.06.11 11:58

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
[...] deutlich, dass user profile iconcode seinen Code selber nicht so ganz ernst nimmt [...]

Von daher bin ich sehr dafür, dieses Topic offen zu lassen.


Bin ich zu blöd für Ironie?

Es wurde ja schon festgestellt, dass der Code keine ordentlichen Zahlen ausgibt und eigentlich ganz andere Probleme hat. Deshalb ist das Problem doch nicht die Schnelligkeit und müsste ganz woanders stehen und auch einen anderen Topictitel haben. Zudem fehlt doch jede nähere Beschreibung des Problems neben einem gedachten "ist zu langsam". Außerdem glaube ich , dass dem Code eher ein paar begins und ends als Nullen fehlen. Daher Schließe mich dem Delphi-Laien an.


Gausi - Do 09.06.11 12:08

Ich beziehe mich bei meiner Einschätzung auf dieses:

user profile iconcode hat folgendes geschrieben Zum zitierten Posting springen:
Wie ihr seht habe ich schon etwas herumprobiert :lol: :


Für mich sieht das nach einem Anfänger aus, der einige Grundprinzipien noch nicht verstanden hat und deswegen etwas für den erfahrenen Programmierer äußerst merkwürdiges probiert. Ihm/Ihr scheint aber durchaus bewusst zu sein, dass dieser Versuch nicht ganz das Wahre ist.

Ich würde diese Meta-Diskussion damit aber gerne beenden. Solange es keine eindeutigen Hinweise auf einen Troll oder einen Doppelaccount eines anderen handelt, sehe ich keinen Grund hier einen neuen Nutzer durch paranoide Anschuldigungen zu vergraulen. :roll:


code - Do 09.06.11 13:41

Entschuldigung, aber ich bin ein grausiger Anfänger in Delphi und möchte mich dafür entschuldigen. Weil ihr es für einen Scherz haltet, meinetwegen nehme ich es halt raus!


jaenicke - Do 09.06.11 13:46

Nicht alle haben das gedacht. ;-)
Und es kamen ja auch entsprechende Hinweise wo das Problem liegt.

Den Beitrag einfach zu löschen ist jedenfalls nicht schön... Hier mal der Originalinhalt für die Nachwelt:
Zitat:
Ich würde gerne einen Prozess beschleunigen sodass er schneller abläuft unzwar dieser:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
case combobox1.itemindex of
0:  begin Zeit:=now+10.0*(1.0/86400.0);
 while (now<=Zeit) do Application.processMessages;
 form1.show ;
 Zeit:=now+0.0000000000000000000000000000000000000000000000000000000001*(1.0/86400.0);
   while (now<=Zeit) do Application.processMessages;
   form1.Hide ;


Wie ihr seht habe ich schon etwas herumprobiert :

Delphi-Quelltext
1:
Zeit:=now+0.0000000000000000000000000000000000000000000000000000000001*(1.0/86400.0);                    


Aber der Prozess hat sich immer noch nicht verschnellert


Delphi-Laie - Fr 10.06.11 18:11

user profile iconcode hat folgendes geschrieben Zum zitierten Posting springen:
Entschuldigung, aber ich bin ein grausiger Anfänger in Delphi und möchte mich dafür entschuldigen. Weil ihr es für einen Scherz haltet, meinetwegen nehme ich es halt raus!


code, du läßt dir aber erstaunlich schnell den Enthusiasmus rauben. Hast du nun echten Wissensbedarf oder nicht? Gerade als Anfänger müßten die Fragen doch nur so aus dir sprudeln. Anstatt du reinen Wein enschenkst und hier ehrlich wenigstens soviel Quelltext veröffentlichst, daß man dein Programmierziel vielleicht wenigstens ansatzweise nachvollziehen kann, machst du erstaunlich (m.E. zu auffällig) schnell einen Rückzieher. Den hier von mehreren Forumsteilnehmern ausgesprochenen Trollverdacht hast du damit nach meiner Meinung eher noch erhärtet. Also, was ist nun?