AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ist das Thread-Sicher?

Ein Thema von emteg · begonnen am 18. Dez 2010 · letzter Beitrag vom 19. Dez 2010
Antwort Antwort
emteg

Registriert seit: 16. Jun 2005
71 Beiträge
 
Delphi 2009 Architect
 
#1

Ist das Thread-Sicher?

  Alt 18. Dez 2010, 23:08
Ich habe hier eine Methode, die zum Versenden von einem String über TCP einen TIdThread verwendet. Nachdem der Thread beendet wurde, gebe ich der Anwendung über entsprechende Events rückmeldung, so dass das Ergebnis in einem Memo angezeigt wird.

Delphi-Quellcode:
procedure TConnector.Send(const AMessage, AHost: String);
var p: integer;
begin
  p := FPort;

  with TSendThread.Create do
  begin
    FreeOnTerminate := true;
    OnTerminate := ThreadTerminated;
    FHost := AHost;
    FMessage := AMessage;
    FPort := p;
    Start;
  end;
end;

procedure TConnector.ThreadTerminated(ASender: TObject);
var s: String;
begin
  s := TIdThread(ASender).TerminatingException;
  if length(s) = 0 then
    DoOnSent(TSendThread(ASender).FMessage, TSendThread(ASender).FHost)
  else
    DoOnSendError(TSendThread(ASender).FMessage, TSendThread(ASender).FHost, s);
end;
Hier noch der Code von TSendThread:

Delphi-Quellcode:
  TSendThread = class(TIdThread)
  private
    FMessage, FHost: String;
    FPort: integer;
  public
    procedure Run; override;
  end;

procedure TSendThread.Run;
begin
  with TIdTCPClient.Create(nil) do
  try
    Host := FHost;
    Port := FPort;
    ConnectTimeout := 1000;
    Connect;
    IOHandler.WriteLn(FMessage);
  finally
    Disconnect;
    Free;
  end;
  Stop;
end;
Muss ich noch irgendwo einen Synchronize-Aufruf einbauen, oder geht das schon so? Denn die Behandlung der Ergebnise findet ja erst nach ende des Threads statt.

Bei einem Test funktioniert zwar alles problemlos, das war aber in einer sehr einfachen Test-Applikation und noch nicht im endgültigen Kontext.

Geändert von emteg (18. Dez 2010 um 23:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Ist das Thread-Sicher?

  Alt 19. Dez 2010, 00:09
Zu den Indys kann ich mich nicht äußern, aber der Code im OnTerminate eines Threads wird bereits Synchronized aufgerufen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz