AGB  ·  Datenschutz  ·  Impressum  







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

Thread - ist das sauberer Code?!

Ein Thema von FAM · begonnen am 18. Feb 2015 · letzter Beitrag vom 18. Feb 2015
Antwort Antwort
FAM

Registriert seit: 22. Dez 2014
47 Beiträge
 
Delphi XE Enterprise
 
#1

AW: Thread - ist das sauberer Code?!

  Alt 18. Feb 2015, 08:06
Dort würde ich ein EventWait.WaitFor einbauen, das wie ein Timer wirkt.

so?

Delphi-Quellcode:

procedure TLivedataThread.Execute;
var
  i: integer;
begin

  inherited;

  while not Terminated do
  begin

    // Invoke terminate, then call abort funtion
    if Self.Terminated then
    begin

      // call abort-function

      // Exit
      Exit;

    end;


    // Callback-Funktion übergeben?
    if Assigned(FCallback) then
      // dann VCL-fähig ausführen
      Synchronize(DoCallbackVCL);

    Sleep(2000);

  end;

end;
aber damit könnte ich den Thread nie von aussen beenden?!

Geändert von FAM (18. Feb 2015 um 08:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Thread - ist das sauberer Code?!

  Alt 18. Feb 2015, 08:31
Delphi-Quellcode:
constructor TLivedataThread.Create(Callback: TLivedataCallback);
begin
  ...
  EventWait := TEvent.Create(nil,true,false,'');
end;

procedure TLivedataThread.Terminate;
begin
  EventWait.SetEvent;

  inherited;
end;

destructor TLivedataThread.Destroy;
begin
  EventWait.Free;

  inherited;
end;

procedure TLivedataThread.Execute;
begin
  while not Terminated do
  begin
  ...
    EventWait.WaitFor(30000);
  end;
end;
Und im Haupthread
Delphi-Quellcode:
  if Assigned(LivedataThread) then
  begin
    LivedataThread.Terminate;
    LivedataThread.WaitFor;
    FreeAndNil(LivedataThread);
  end;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
FAM

Registriert seit: 22. Dez 2014
47 Beiträge
 
Delphi XE Enterprise
 
#3

AW: Thread - ist das sauberer Code?!

  Alt 18. Feb 2015, 09:45
Und im Haupthread
Delphi-Quellcode:
  if Assigned(LivedataThread) then
  begin
    LivedataThread.Terminate;
    LivedataThread.WaitFor;
    FreeAndNil(LivedataThread);
  end;
hmm, die zeilen verstehe ich nicht? kannst du die bitte einzeln erklären und warum auch in dieser reihenfolge
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Thread - ist das sauberer Code?!

  Alt 18. Feb 2015, 09:55
1. Dem Thread mitteilen, er möge sich bitte beenden
2. Warten, bis der Thread eben dies getan hat
3. Die Instanz freigeben.
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Thread - ist das sauberer Code?!

  Alt 18. Feb 2015, 08:35
Schau dir Delphi-Referenz durchsuchenTEvent an.

Im Übrigen läuft so ein Thread erst nach dem Erzeugen los - damit erübrigt sich auch das Erzeugen im Suspended Mode.
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)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Thread - ist das sauberer Code?!

  Alt 18. Feb 2015, 08:40
@baumina

Wenn du eine kleine Änderung vornimmst
Delphi-Quellcode:
destructor TLivedataThread.Destroy;
begin
  Terminate;
  EventWait.SetEvent;

  inherited;
  EventWait.Free;
end;
dann reicht ein simples
FreeAndNil( LiveDataThread ); bzw. wenn man die protected Methode TThread.TerminatedSet überschreibt mit
Delphi-Quellcode:
procedure TLivedateThread.TerminatedSet;
begin
  inherited;
  EventWait.SetEvent;
end;

destructor TLivedataThread.Destroy;
begin

  inherited;
  EventWait.Free;
end;
dann wird es noch weniger Code
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)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Thread - ist das sauberer Code?!

  Alt 18. Feb 2015, 08:48
Danke Rufo, gefällt mir.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  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 00:43 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