Forum: Object-Pascal / Delphi-Language
Delphi
by Kraisel,
8. Nov 2014
Für den Thread hast Du völlig recht. Da habe ich mich vielleicht nicht klar genug ausgedrückt, denn ich wollte sicher nicht anregen, dass man Suspend benutzen soll. Ich habe lediglich versucht, die Analogie zum Fiber hergestellt, denn da besteht leider immer das Problem, dass das Ende der Methoden in denen umgeschaltet wird niemals aufgerufen werden, wenn der Fiber gerade beendet wird. Er kann...
Forum: Object-Pascal / Delphi-Language
Delphi
by Kraisel,
8. Nov 2014
VORSICHT: Wenn die Fiberumschaltung irgendwo in einer aufgerufenen Methode vor dem finally geschieht, und der Fiber dann beendet wird, wird finally niemals aufgerufen. Dieses Problem hat man auch beim Thread, wenn er mit Suspend angehalten und dann verworfen wird.
Allgemein: Die erste Entscheidung bei paralleler Programmierung ist, ob man dadurch einen Performancegewinn oder deutlich besser...
Forum: Object-Pascal / Delphi-Language
Delphi
by Kraisel,
8. Nov 2014
Threads sind ein präemptives Multitasking. Fiber ist ein kooperatives Multitasking und läuft in EINEM Thread. Die Umschaltung der Fiber kostet keine Verwaltung (wenige ns) und die einzelnen Fiber müssen auch nicht gegeneinander verriegelt werden. Der gesamte Betriebssystem Overhead ist dadurch weg. Das hat für viele technische Probleme enorme Vorteile.
Ich automatisiere z.B. riesige...
Forum: Object-Pascal / Delphi-Language
Delphi
by Kraisel,
7. Nov 2014
Meine Pointermystik war nur für diese Tests ein Ersatz, um nicht ständig in der CPU-Ansicht die Speicherbereiche einzutippen! Ich wollte sicher sein, dass wirklich der Speicher so aussieht. Deshalb habe ich keine Methoden aus dem System genommen. Wird ansonsten nicht genutzt.
Des Rätsels Lösung ist dann wohl, dass in einer Fibermethode das "end" ja nie erreicht wird, und somit die...
Forum: Object-Pascal / Delphi-Language
Delphi
by Kraisel,
7. Nov 2014
Alles mit XE7 Pro
procedure Test;
var
s1,s2: String;
i: Integer;
begin
i := 123;
s1 := IntToStr(I); // der Referenzzähler von s1 ist hier 1 :-)
GetDynVarPrms(s1);