Gibt es in Delphi 2006 - XE neue parallele Programmierfunktionen?Gibt es in Delphi 2006 - XE neue parallele Programmierfunktionen?
Antwort
In Delphi XE gibt es eine TThread.CreateAnonymousThread, die eine einfache Ausführung von Hintergrundaufgaben ermöglicht.
Eine triviale Demo:
TThread.CreateAnonymousThread(
procedure begin
Sleep(10000); // replace with a real workload
end
).Start;
Minimal in den Versionen selbst. In Delphi 2009 wurde die Unterstützung für anonyme Methoden in TThread.Synchronize
hinzugefügt, und in XE wurde eine Thread-Kommunikationswarteschlange zu Generics.Collections
hinzugefügt.
Aber die Gemeinde hat einige interessante Sachen beigetragen. Zum Beispiel, überprüfen Sie OmniThreadLibrary.
Derzeit keine Multicores-CPU, auch wenn Codes in Multithreads ausgeführt werden. sperren und entsperren Problem ist, warum
- Speichermanager. es ist besser als in der Vergangenheit
- String Referenzzähler
- Schnittstelle Referenzzähler ist
Cheer
IMO die stärkste und die am wenigsten bekannte Multi-Threading-Funktion eingeführt, nachdem Delphi 7 TThread.Queue Methode. Zum Beispiel, statt
Synchronize(
procedure
begin
Form1.Memo1.Lines.Add(‘Begin Execution’);
end);
können Sie verwenden
Queue(
procedure
begin
Form1.Memo1.Lines.Add(‘Begin Execution’);
end);
TThread.Queue sind eine Alternative zu TThread.Synchronize, dass ein Arbeitsthread (mit Synchronize ruft eine Worker-Thread wartet, bis der Haupt-Thread beendet fortzusetzen, ohne zu warten erlaubt Ausführung des synchronisierten Codes) - ein wirklich nettes Feature, das als Ersatz für die benutzerdefinierte Nachrichtenverarbeitung mit PostMessage verwendet werden kann.
FYI, Delphi 10.2 Tokyo hat ['TThread.ForceQueue()'.] (Http://docwiki.embarcadero.com/Libraries/en/System.Classes.TThread.ForceQueue) hinzugefügt, was ähnlich wie TThread.Queue ist() 'mit der Ausnahme, dass der angegebene Code immer zur späteren Ausführung in die Warteschlange gestellt wird *, selbst wenn er im Haupt-UI-Thread * aufgerufen wird. 'TThread.Queue()' führt die Ausführung der Warteschlange nicht aus, wenn sie im Haupt-UI-Thread aufgerufen wird. Sie wird sofort ausgeführt, wie 'TThread.Synchronize()'. –
Seit 2010 oder XE Themen benannt werden kann, obwohl dies nur sichtbar im Debugger ist (nicht in zB sysinternals Sachen wie procesxp)
- 1. "VarToStr" in Delphi XE?
- 2. Delphi 2006 Optimierungsfehler
- 3. Debugging-Code in Delphi XE
- 4. Delphi 2006 Fehler in Eoln
- 5. Ungültiger Zeigerbetrieb - Delphi XE
- 6. delphi xe deaktivieren RTTI
- 7. Delphi 2006 system.delete für widestrings?
- 8. Delphi XE Build-Ereignisse .. global?
- 9. Wie TStringGrid von Delphi 7 Delphi XE
- 10. DELPHI XE wpf wie GUI
- 11. POPCNT in Delphi XE/XE2 64bit
- 12. UnicodeString- zu PAnsiChar in Delphi Konvertieren XE
- 13. Delphi XE Speicherverlust in TWSDLLookup.Destroy Methode
- 14. Keine xercesxmldom-Einheit in Delphi XE mehr?
- 15. Gibt es eine parallele Flutfüllungsimplementierung?
- 16. Bedingte Änderung Anwendungssymbol mit Delphi 2006
- 17. übersetzen Header-Datei zu Delphi 2006
- 18. Delphi XE 32-Bit vorzeichenbehaftete Darstellung
- 19. Build-Server von Delphi XE nach Delphi XE2 migrieren
- 20. SQL-Abfrage auf TClientDataSet (CDS-Datei) in Delphi XE?
- 21. Kann „ungenutzt“ Klassen in Delphi XE zur Verfügung gestellt werden
- 22. Wie man HTTP Client API in Delphi xe
- 23. Wie Objekte werden in delphi XE vs XE4 initialisiert
- 24. Debuggen Probleme mit 'WITH' Aussage in Delphi 2006
- 25. Gibt es Podcasts zu Delphi?
- 26. BizTalk 2006 ESB - Gibt es einen WcfCustom-Adapter?
- 27. Gibt es in Delphi eine effiziente Wortsuchfunktion?
- 28. Fehler in Delphi 2009? -> * .res nicht im Projekt-Suchpfad gefunden (funktioniert in Delphi 2006)
- 29. Parallele Erstellung von delphi Projekte durch MSBuild
- 30. Delphi XE benutzerdefinierte Build-Ziel ist immer deaktiviert
"Derzeit liegen keine Multicores cpu" - Sagst du, dass, wenn ich Threads erzeuge, sie * alle * auf einem Kern laufen? – RobertFrank
Sie können auf allen Kernen laufen, aber wenn es jemals einen Sperrcode namens/used gibt, kann er auf dem mem-Bus aktivieren, wodurch andere CPUs/Kerne für die Dauer des Aufrufs angehalten werden. Nehmen wir an, Sie haben eine CPU mit vier Kernen und vier Threads, die auf jedem Kern ausgeführt werden. Wenn die Sperre aufgetreten ist, müssen alle anderen CPUs/Kerne angehalten werden. Hier ist für Sie zu lesen: http://software.intel.com/en-us/articles/implementing-scalable-atomic-locks-for-multi-core-intel-em64t-and-ia32-architectures/ – APZ28
Das ist genau was das wollten wir in unserer Enhanced RTL und mit unserem SynScaleMM vermeiden. Siehe http://synopse.info/forum/viewtopic.php?id=57 Der größte Engpass ist jedoch definitiv der Speichermanager, nicht diese LOCK asm-Anweisungen. Dann ist SynScaleMM praktisch. –