Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: Objekt in Thread und Mainthread verwenden

  Alt 1. Apr 2010, 19:33
Welche Methoden jeweils aufgerufen werden ist egal

Du muß gemeinsam genutzte und nicht threadsichere Variablen/Resourcen gegeneinander absichern.

Beispiel

Delphi-Quellcode:
// threadsave

// Thread 1 greift nur auf Proc zu
// Thread 2 greift nur auf Proc zu

type TMayClass = class
    A, B: Integer;
    procedure ProcA;
    procedure ProcB;
  end;

procedure TMyClass.ProcA;
begin
  Inc(A);
end;

procedure TMyClass.ProcB;
begin
  Inc(B);
end;
Delphi-Quellcode:
// NICHT threadsave

// Thread 1 greift nur auf ProcA zu
// Thread 2 greift nur auf ProcB zu

type TMayClass = class
    X: Integer;
    procedure ProcA;
    procedure ProcB;
  end;

procedure TMyClass.ProcA;
begin
  Inc(X);
end;

procedure TMyClass.ProcB;
begin
  Inc(X);
end;

// aber so wäre es threadsave

var CS: TCriticalSection;

// Thread 1
CS.Enter;
try
  MyClass.ProcA;
finally
  CS.Leave;
end;

// Thread 2 genauso
...
Delphi-Quellcode:
// threadsave

// Thread 1 greift nur auf Proc(1) zu
// Thread 2 greift nur auf Proc(2) zu

type TMayClass = class
    A, B: Integer;
    procedure Proc(i: Integer);
  end;

procedure TMyClass.Proc(i: Integer);
begin
  if i = 1 then Inc(A) else Inc(B);
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat