Es ist vollbracht
Version 0.5.2.0
Wie vor kurzem Angekündigt kommt hier nun ein großes Update. Die neue Multi-Threading-Funktion hat intern einige extreme Einschnitte mit sich gebracht und ich hoffe, dass alles funktioniert. Die Thread-Geschichte habe ich mehrere Tage lang geprüft sie und sollte funktionieren. Ob wirklich alles perfekt synchronisiert ist, kann ich nur hoffen - ich habe mir jedenfalls sehr viel Mühe gegeben. Die grundlegenden Threading-Funktionen habe ich erfolgreich unter Delphi 7, Delphi 2010 und Lazarus getestet.
- Neuerungen
- Multi-Threading ist jetzt innerhalb eines Scriptes möglich. Man kann nun innerhalb eines Scripts eigene Threads erstellen und Script-Quelltext in diesen Threads ausführen lassen
- Neuer Namespace: System.Threading
- Neue Klasse: System.Threading.TThread
- Neue Klasse: System.Threading.TExecutionContext
- Neue Klassen in System.Threading: TCriticalSection, TMutex, TEvent, Monitor
- Neues Record in der System-Unit: System.TGuid
- Neues Record in der System-Unit: System.TVersion
- Änderungen
- Record-Vergleiche sollten nun funktionieren. Da aus Performance-Gründen nur ein roher Speicher-Vergleich erstellt wird, funktionieren Record-Vergleiche, bei denen die Records strings enthalten, nicht. Der Compiler gibt jedoch eine Warnung bei solchen Vergleichen an.
- Der interne Programmablauf der RunTime hat sich auf Grund des Threading-Supports sehr geändert. Ich hoffe aber, dass alles weiterhin funktioniert
- Statische Variablen werden jetzt nicht mehr unten im Stack sondern in einem seperaten Speicher abgelegt
- Bug-Fixes
- Kleines Problem bei der record-Deklaration behoben: bei abgeleiteten Typen als Record-Variablen - z.B. bei LongInt (ist von integer abgeleitet) wurde die finale Record-Größe im Speicher falsch berechnet.
Noch ein paar kurze Worte:
- Ich habe das PDF im Download mit der Threading-Geschichte erweitert. Darin sind jetzt ein paar grundlegende Sachen niedergeschrieben.
- Falls wer in der Beispiel-IDE Threading ausprobieren will: das eingebaute Konsolen-Fenster (also Console.Write..., usw) sind thread-safe implementiert.
- Ein empfohlenes Script: wenn ihr die Beispiel-IDE öffnet, könnt ihr mal das Projekt "Projects\ThreadingPrimeNumber\ThreadedPrime.sproj ect" öffnen und laufen lassen. In diesem Script wird die Anzahl der Primzahl zwischen 0 und 750000 berechnet. Beim Start könnt ihr auswählen, ob nur ein Thread alles berechnen soll, oder ob sich die Arbeit 15 Threads teilen sollen.
- In der IDE werden jetzt nicht mehr alle Packages automatisch geladen. Jedoch könnt ihr, während das Program läuft, neue Packages hinzufügen oder vorhanden deaktivieren. Dafür gibt es einen neuen Tab auf der linken Seite.
- Falls wem in seinem Programm die Threads innerhalb eines Scriptes ein Dorn im Auge ist, so kann man die komplette Threading-Geschichte natürlich auch deaktivieren. Dafür gibt es in der Datei "ScriptEngine.inc" ein neues Define, mit dem man den Threading-Namespace komplett raus schmeißen kann.
Der Download befindet sich wie immer im
ersten Post ( - oder im
SVN)
Grüße