![]() |
Criticalsection Aquire vs Enter
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. |
AW: Criticalsection Aquire vs Enter
Doch, es ist das gleiche - zumindest bei Delphi 7.
Da ruft TCriticalSection.Enter Aquire auf - und sonst nix. also so:
Delphi-Quellcode:
Zu finden in SyncObjs.pas
procedure TCriticalSection.Enter;
begin Aquire; end; Gruß GRL |
AW: Criticalsection Aquire vs Enter
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. |
AW: Criticalsection Aquire vs Enter
In XE5 das gleiche. Reines Synonym.
Interessant ist aber das Bestehen einer Helperklasse
Delphi-Quellcode:
welche wieder von Acquire aufgerufen wird:
TCriticalSectionHelper
Delphi-Quellcode:
FSection ist ein Alias für den Record
procedure TCriticalSection.Acquire;
begin FSection.Enter; end;
Delphi-Quellcode:
und die Helperklasse greift mit folgenden Methoden ihm unter die Arme:
Winapi.Windows._RTL_CRITICAL_SECTION
Delphi-Quellcode:
mit
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;
Delphi-Quellcode:
Das geht (zumindest unter Windows) auf die kernel32.dll:
procedure TCriticalSectionHelper.Enter;
begin EnterCriticalSection(Self); end;
Delphi-Quellcode:
Hoffe, das hilft dir beim nächsten Fernsehquiz weiter :-D
procedure EnterCriticalSection; external kernel32 name 'EnterCriticalSection';
The more you know... |
AW: Criticalsection Aquire vs Enter
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. :thumb: |
AW: Criticalsection Aquire vs Enter
Delphi-Quellcode:
Ein Synchronisationsobjekt wird beschlagnahmt oder freigelassen.
type
TSynchroObject = class(TObject) procedure Acquire; virtual; procedure Release; virtual; end;
Delphi-Quellcode:
Ein kritischer Abschnitt wird betreten oder verlassen.
type
TCriticalSection = class(TSynchroObject) procedure Enter; inline; procedure Leave; inline; end; Es wird sprachliche Konsistenz hergestellt. Unsere Sprache ist unsere Welt in der wir zu denken vermögen. Sie ist wichtig und bedarf der Pflege. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz