Einzelnen Beitrag anzeigen

Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Synchronisieren von hauptthread und Teilthread

  Alt 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
  Mit Zitat antworten Zitat