AGB  ·  Datenschutz  ·  Impressum  







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

Criticalsection Aquire vs Enter

Ein Thema von Shark99 · begonnen am 23. Jan 2014 · letzter Beitrag vom 24. Jan 2014
Antwort Antwort
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#1

Criticalsection Aquire vs Enter

  Alt 23. Jan 2014, 12:57
Was ist der Unterschied zwischen Aquire und Enter bei einer CriticalSection?

In der Hilfe heisst es "Enter calls the Acquire method", also kann es nicht das Gleiche sein.
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Criticalsection Aquire vs Enter

  Alt 23. Jan 2014, 13:10
Doch, es ist das gleiche - zumindest bei Delphi 7.

Da ruft TCriticalSection.Enter Aquire auf - und sonst nix.

also so:
Delphi-Quellcode:
procedure TCriticalSection.Enter;
begin
  Aquire;
end;
Zu finden in SyncObjs.pas

Gruß
GRL
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Criticalsection Aquire vs Enter

  Alt 23. Jan 2014, 13:12
Und Aquire ruft wiederum Enter der dahinterstehenden API-Kapselung (TRTLCriticalSection für Windows, TCritSec für den Rest) auf.

Steht aber alles wie grl schon geschrieben hat im Quelltext.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Criticalsection Aquire vs Enter

  Alt 23. Jan 2014, 13:16
In XE5 das gleiche. Reines Synonym.

Interessant ist aber das Bestehen einer Helperklasse TCriticalSectionHelper welche wieder von Acquire aufgerufen wird:

Delphi-Quellcode:
procedure TCriticalSection.Acquire;
begin
  FSection.Enter;
end;
FSection ist ein Alias für den Record Winapi.Windows._RTL_CRITICAL_SECTION und die Helperklasse greift mit folgenden Methoden ihm unter die Arme:

Delphi-Quellcode:
  TCriticalSectionHelper = record helper for TRTLCriticalSection
    procedure Initialize; inline;
    procedure Destroy; inline;
    procedure Free; inline;
    procedure Enter; inline;
    procedure Leave; inline;
    function TryEnter: Boolean; inline;
  end;
mit

Delphi-Quellcode:
procedure TCriticalSectionHelper.Enter;
begin
  EnterCriticalSection(Self);
end;
Das geht (zumindest unter Windows) auf die kernel32.dll: procedure EnterCriticalSection; external kernel32 name 'EnterCriticalSection'; Hoffe, das hilft dir beim nächsten Fernsehquiz weiter

The more you know...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Criticalsection Aquire vs Enter

  Alt 23. Jan 2014, 14:02
Der Grund dafür ist einfach:
Der Record TCritSec für andere Systeme als Windows hat einfach die gleichen Methoden, so dass man beides ansonsten gleich schreiben kann. Eine gute Idee muss ich sagen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Criticalsection Aquire vs Enter

  Alt 24. Jan 2014, 01:53
  • Aquire wird umbenannt in Enter
  • Release wird umbenannt in Leave
Ein Blick in die Herkunft der Methoden hilft verstehen:
Delphi-Quellcode:
type
  TSynchroObject = class(TObject)
    procedure Acquire; virtual;
    procedure Release; virtual;
  end;
Ein Synchronisationsobjekt wird beschlagnahmt oder freigelassen.
Delphi-Quellcode:
type
  TCriticalSection = class(TSynchroObject)
    procedure Enter; inline;
    procedure Leave; inline;
  end;
Ein kritischer Abschnitt wird betreten oder verlassen.

Es wird sprachliche Konsistenz hergestellt.

Unsere Sprache ist unsere Welt in der wir zu denken vermögen. Sie ist wichtig und bedarf der Pflege.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  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 01:26 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