AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

System.AtomicXXX auch für dcc32/dcc64?

Offene Frage von "Stevie"
Ein Thema von Der schöne Günther · begonnen am 22. Aug 2014 · letzter Beitrag vom 23. Aug 2014
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

System.AtomicXXX auch für dcc32/dcc64?

  Alt 22. Aug 2014, 13:30
Delphi-Version: XE4
Seit XE4 (?) gibt es nun anscheinend plattformunabhängige Methoden für Dinge wie 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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 22. Aug 2014, 13:51
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.
$2B or not $2B

Geändert von himitsu (22. Aug 2014 um 13:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 22. Aug 2014, 14:04
Du kannst natürlich auch die Methoden aus TInterlocked in System.SyncObjs nehmen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 22. Aug 2014, 14:06
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

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

  Alt 22. Aug 2014, 14:10
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

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

  Alt 23. Aug 2014, 03:23
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 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