AGB  ·  Datenschutz  ·  Impressum  







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

Threads und Events

Ein Thema von Viktorii · begonnen am 21. Mär 2012 · letzter Beitrag vom 21. Mär 2012
Antwort Antwort
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#1

Threads und Events

  Alt 21. Mär 2012, 10:29
Delphi-Version: XE2
Moin.

Kann man Threads so mit Events verwenden, wenn die Methode StartNow von einem anderen bzw. Hauptthread aufgerufen wird, oder gibt es da irgendwelche Fallstricke?

Delphi-Quellcode:
type
  TMyThread = class(TThread)
  private
    FStart: TEvent;
  protected
    procedure Execute; override;
  public
    procedure StartNow();
  end;

implementation

procedure TMyThread.Execute;
begin

  FStart := TEvent.Create(nil, false, false, '');

  while not Terminated do
  begin
    //--- Auf StartEvent warten
    FStart.WaitFor(INFINITE);
    ...
    ...
  end;
end;

procedure TSweepThread.StartNow;
begin
  FStart.SetEvent;
end;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Threads und Events

  Alt 21. Mär 2012, 10:59
Mit den originalen Events von Windows (CreateEvent, SetEvent, ...) ist das kein Problem. TEvent habe ich noch nie benutzt, aber ich vermute, dass das auch nur auf die API zugreift und es dann auch kein Problem sein sollte.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Threads und Events

  Alt 21. Mär 2012, 11:54
Sehe da kein Problem.

Jup, TEvent kapselt nur API Aufrufe, soweit ich das noch weiß.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Threads und Events

  Alt 21. Mär 2012, 11:56
Verwendest Du dabei die gleiche Variable FStart? Das mag funktionieren, weil das WaitFor ja unendlich wartet und da steht und solange mutmaßlich eh kein anderer Zugriff auf FStart stattfindet. Aber sauberer wäre imho ein named event, jeweils getrennt angelegt. So verfahre ich in etlichen Threads, meistens um Pausen einzubauen, die bei Programmende aber durch den Event-Trigger den Thread sofort beenden lassen.

Genauso würde ich nicht INFINITE warten, sondern eine vordefinierte Zeit, und stattdessen den Rückgabewert auswerten (entweder Timeout oder gewünschtes Signal). So braucht das Programm halt maximal jene vordefinierte Zeit und der Thread muss nicht auf die harte Tour getötet werden.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Threads und Events

  Alt 21. Mär 2012, 12:54
Du solltest an dieser Stelle THandleObject.WaitForMultiple nutzen, damit auch ein Terminate noch verarbeitet wird. Dazu musst du ein zweites Event erzeugen, welches im DoTerminate deiner Threadklasse signalisiert wird.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 15:03 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