Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi System.AtomicXXX auch für dcc32/dcc64? (https://www.delphipraxis.net/181533-system-atomicxxx-auch-fuer-dcc32-dcc64.html)

Der schöne Günther 22. Aug 2014 12:30

Delphi-Version: XE4

System.AtomicXXX auch für dcc32/dcc64?
 
Seit XE4 (?) gibt es nun anscheinend plattformunabhängige Methoden für Dinge wie
Delphi-Quellcode:
InterlockedAdd
aus der Winapi. In Delphi nennt es sich nun System.AtomicIncrement. Das Wiki spricht wieder etwas kryptisch:
Zitat:

Atomic intrinsic Increment function for use with Delphi mobile compilers. Increments the specified number (<Target>) by the specified number (<Increment>) or 1 if the <Increment> parameter is not specified. Returns the new value of <Target>.

Because the Delphi mobile compilers do not support a built-in assembler, the System unit provides [...]
Meine Frage: Das kann ich auch normal auf dem Desktop benutzen, richtig? Ich finde in der System.pas keine Implementierung um das zu überprüfen. Ich kann nur ein paar Testprogramme schreiben und schauen ob am Schluss rauskommt, was ich dachte. Bislang ist das der Fall. Lieber hätte ich allerdings, dass mir jemand gut zuredet und sagt
Zitat:

Ja, das ist eine gute, plattformunabhängige Methode. Unter Windows gibt es keinen Grund mehr, die WinApi-Methoden zu benutzen

himitsu 22. Aug 2014 12:51

AW: System.AtomicXXX auch für dcc32/dcc64?
 
Die WinAPIs, FastMM und Co. der System.pas wurden in .INC ausgelagert, welche in der System.pas eingebunden werden. (einfach mal nach ".inc" suchen)

Oder es ist CompilerMagic ... liegt also direkt im Compiler und wird nur in der System-Unit angezeigt, weil es nirgendwo drin ist.



Ich weiß jetzt nur nicht, was diese Atomic-Methoden machen, wenn sie z.B. für Windows kompiliert werden.
Wenn die am Ende die alten WinAPIs aufrufen, oder die entsprechenden Assemblerbefehle ausführen, dann seh ich keinen Grund, warum man dann nicht lieber die neuen Funktionen verwenden sollte.

Uwe Raabe 22. Aug 2014 13:04

AW: System.AtomicXXX auch für dcc32/dcc64?
 
Du kannst natürlich auch die Methoden aus
Delphi-Quellcode:
TInterlocked
in System.SyncObjs nehmen.

Uwe Raabe 22. Aug 2014 13:06

AW: System.AtomicXXX auch für dcc32/dcc64?
 
Zitat:

Zitat von himitsu (Beitrag 1269570)
Oder es ist CompilerMagic ... liegt also direkt im Compiler und wird nur in der System-Unit angezeigt, weil es nirgendwo drin ist.

Exakt! Der jeweilige Compiler setzt das dann gleich passend für die jeweilige Zielplattform um.

Namenloser 22. Aug 2014 13:10

AW: System.AtomicXXX auch für dcc32/dcc64?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1269564)
Meine Frage: Das kann ich auch normal auf dem Desktop benutzen, richtig? Ich finde in der System.pas keine Implementierung um das zu überprüfen. Ich kann nur ein paar Testprogramme schreiben und schauen ob am Schluss rauskommt, was ich dachte.

Setz doch einen Breakpoint drauf und wechsle in die Assembler-Ansicht. Dann siehst du ja, was konkret aufgerufen wird.

Stevie 23. Aug 2014 02:23

AW: System.AtomicXXX auch für dcc32/dcc64?
 
Zitat:

Ja, das ist eine gute, plattformunabhängige Methode. Unter Windows gibt es keinen Grund mehr, die WinApi-Methoden zu benutzen
Den Grund gabs schon seit XE und SyncObjs.TInterlocked nicht mehr. Die neuen compiler magic Functions sind aber sozusagen Assembler Funktionen, die geinlined werden. Etwas was man so nicht hinbekommt (da man asm routinen nicht inlinen kann). Der Code, der dort also generiert wird, ist besser als nen Aufruf irgendeiner normalen InterlockedIncrement oder so.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz