Registriert seit: 19. Jan 2003
732 Beiträge
Turbo Delphi für Win32
|
Re: Synchronisieren von hauptthread und Teilthread
9. Mär 2008, 00:07
Abend!
- Menge der Daten, auf die sowohl Thread_A als auch der Hauptthread zugreifen, minimieren.
- Critical sections nur im Hauptthread verwenden:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
CS.Enter;
try
Label1.Caption := SomeDataToString(Thread_A.SomeData);
finally
CS.Leave;
end;
end;
- Lieber dem Thread ein Ereignis geben, welches mit Synchronize() aufgerufen wird.
Delphi-Quellcode:
type
TSyncEvent = procedure(Sender: TObject{; ....}) of object;
TThread_A = class(TThread)
private
FOnSync: TSyncEvent;
procedure DoOnSync;
public
property OnSync TSyncEvent read FOnSync write FOnSync;
end;
implementation
procedure TThread_A.DoOnSync;
begin
Assert(Assigned(FOnSync));
FOnSync(Self);
end;
procedure TThread_A.Foo;
begin
if Assigned(FOnSync) then Synchronize(DoOnSync);
end;
- Den Datenaustausch zwischen Hauptthread und Thread_A in eine Containerklasse auslagern, welche mit einem Singleton des TMultiReadExclusiveWriteSynchronizer den Zugriff regelt.
Dani H. At Least I Can Say I Tried
|