![]() |
Re: Try..except beschleunigen
hallo!
Ich habs schonmal gesagt :) Wenn man probleme hat mit division durch 0 muss man nur Set8087CW($133f); schreiben dann kommen die fehler nicht mehr sondern der wert wird von alleine unendlich und so. Liebe Grüsse Laufi |
Re: Try..except beschleunigen
Das scheint tatsächlich zu funktionieren. Gibts irgendwo eine detailierte Beschreibung der FPU Funktionen/Befehle ?
|
Re: Try..except beschleunigen
Schade, dass immer mehr über das "warum machst du denn das so" als über die eigentliche Frage diskutiert wird...
Try - Except - Blöcke sind m.E. nach unvermeidlich, wenn man mit Transactions arbeitet. Und das können schon mal ziemlich große Blöcke werden. Die Beantwortung der eigentlichen Frage wäre also schon sehr wertvoll ;) |
Re: Try..except beschleunigen
Hi,
Zitat:
Delphi-Quellcode:
In dem Kommentar ist erklärt, was danach getan wurde.
//FPU CW setzen... siehe z. B. unter
//http://www.website.masmforum.com/tutorials/fptute/fpuchap1.htm#cword { Binär: XXXX0011XXXXXXXX (X - unverändert) ^ Unterscheidung zw. +INF und -INF auf alten FPUs ^^ Rundung: nach normalen Rundungsregeln auf-/ab ^^ Genauigkeit: Extended (auf manschen Systemen komischerweise auf Double gestellt) ^^^^^^ versch. Gleitkommaexceptions } Set8087CW((Get8087CW and $F3FF) or $0300); Mfg FAlter |
Re: Try..except beschleunigen
Meine angezeigte Prozessorauslastung beträgt nun über 50% (statt zuvor 20%).
Wird die Auslastung der FPU im Taskmanager angezeigt ? Also, kann es sein dass die FPU ausgelastet ist und die CPU so lange in Idle geht ? |
Re: Try..except beschleunigen
Die FPU ist doch Teil der CPU (neben ALU)
|
Re: Try..except beschleunigen
Zitat:
Zum Thema: ein einfacher try-Except oder try-finally-Block bremst dein Programm nicht aus. Erst, wenn wirklich eine Exception auftritt, geht es los. Dies apssiert aber auch, wenn kein Except-Block existiert. Bei letzterem stürzt der Thread oder das Programm ab. Um jede Ereignisbehandlung hat die VCL einen try-Except-Block gelegt. was passiert nun bei try: Es gibt für jeden Thread einen Thread-Context. Der befindet sich im Segement fs. Und dort an erster Stelle. Wenn irgendwo eine Exception auftritt, schaut windows an die Adresse fs:[0]. Und dort steht ein Pointer auf einen Record. Der Record besteht aus 3 Teilen und wird beim Befehl try angelegt: -Register EBP -Adresse des Except (finally) Blocks (man sagt auch Adresse des "save Place") -Adresse des des bisherigen ExceptionRecords (es wird also eine Liste der Records aufgebaut So, jetzt kommt ein Satz Halbwissen: Der Record muss zwingend auf dem Stack liegen, dadurch ist auch klar, welchen Wert ESP zum Zeitpunkt des try hatte. Was passiert also bei einem try genau? Es werden 3 Befehle ausgeführt:
Delphi-Quellcode:
Von Prozessorauslastung kann dabei keine Rede sein. Denn jetzt kommt ganz normal der Code hinter dem try, egal ob diese 4 Befehle davor stehen.
asm
push ebp push @Exceptblock push fs:[0] mov fs:[0], esp end; Und hinterher (wenn keine Exception auftrat) muss natürlich der Stack wieder aufgeräumt werden und der Wert an fs:[0] zurückgesetzt:
Delphi-Quellcode:
Fertig.
asm
//Beispiel pop fs:[0] pop edx pop edx end; Im Übrigen setzt Delphi um jede Funktion, die dynamische Arrays oder strings oder Variants verwendet, einen try-finally Block |
Re: Try..except beschleunigen
Zitat:
|
Re: Try..except beschleunigen
Hallo!
Ja 1/0 ist schon undefiniert aber 1 durch eine ganz kleine zahl gibt eine sehr grosse zahl also kann sagen 1/0 ist sowas wie unendlich wenn es doch schon ein unendlich gibt! für was sonst :) man kann es sich auch besser vorstellen wenn man die berechnung zeichnen will anstatt einfach eine exception :roll: liebe Grüsse Laufi |
Re: Try..except beschleunigen
1/x ist als sgn(x)*unendlich definirt, wenn x gegen 0 geht. (Grenzwertrechnung)
Aber 1/0 ist undefiniert, und von einem mathmatischen Parser würde ich erwarten, dass er mathematisch korrekt arbeitet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz