AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Properties, ihre Getter und Setter und Thread-Safety
Thema durchsuchen
Ansicht
Themen-Optionen

Properties, ihre Getter und Setter und Thread-Safety

Ein Thema von Der schöne Günther · begonnen am 15. Mär 2013 · letzter Beitrag vom 15. Mär 2013
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Properties, ihre Getter und Setter und Thread-Safety

  Alt 15. Mär 2013, 14:05
Also für Faule gibt es z.B. folgende Lösung
Delphi-Quellcode:
unit CSLazy;

interface

uses
  SyncObjs;

type
  ICS = interface
    ['{C1D6A40D-14CA-4E33-8FF7-CD0A01385343}']
    procedure Enter;
    function TryEnter : Boolean;
    procedure Leave;
  end;

function CS( ACS : TCriticalSection ) : ICS;

implementation

type
  TCS = class( TInterfacedObject, ICS )
  private
    FCS : TCriticalSection;
    FEntered : Boolean;
  protected
    procedure Enter;
    function TryEnter : Boolean;
    procedure Leave;
  public
    constructor Create( ACS : TCriticalSection );
    destructor Destroy; override;
  end;

function CS( ACS : TCriticalSection ) : ICS;
begin
  if Assigned( ACS )
  then
    Result := TCS.Create( ACS )
  else
    Result := nil;
end;

{ TCS }

constructor TCS.Create( ACS : TCriticalSection );
begin
  inherited Create;
  FCS := ACS;
end;

destructor TCS.Destroy;
begin
  if FEntered
  then
    FCS.Leave;

  inherited;
end;

procedure TCS.Enter;
begin
  FCS.Enter;
  FEntered := True;
end;

procedure TCS.Leave;
begin
  FCS.Leave;
  FEntered := False;
end;

function TCS.TryEnter : Boolean;
begin
  Result := FCS.TryEnter;
  FEntered := Result;
end;

end.
Benutzung:
Delphi-Quellcode:
type
  TMyThread = class( TThread )
  private
    FCS : TCriticalSection;
    FValue : string;
    function GetValue : string;
    procedure SetValue( const Value : string );
  public
    property Value : string read GetValue write SetValue;
  end;

function TMyThread.GetValue : string;
begin
  CS( FCS ).Enter;
  Result := FValue;
end;

procedure TMyThread.SetValue( const Value : string );
begin
  CS( FCS ).Enter;
  FValue := Value;
end;
UPDATE

Du könntest auch über indizierte Properties gehen, dann hast du nur einen Getter/Setter für alle (gut der Typ muss gleich sein, wobei ja auch z.B. Delphi-Referenz durchsuchenTValue oder Delphi-Referenz durchsuchenVariant als Typ möglich wären).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (15. Mär 2013 um 14:23 Uhr)
  Mit Zitat antworten Zitat
 

 

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 16:07 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