Einzelnen Beitrag anzeigen

Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wartezeit eines Thread vorher abbrechen

  Alt 19. Apr 2011, 14:05
Hier mal ein paar Codeschnipsel:

Delphi-Quellcode:
type
  TmyThread = class(TThread)
  public
    EventWait: TEvent; // Event zum Abbruch eines Wartens zwischen zwei Abfragen beim Terminate

    constructor Create(CreateSuspended: Boolean);
    destructor Destroy; override;
    procedure Terminate;
    [...]
  protected
    procedure Execute; override;
    [...]
  end;

[...]

constructor TmyThread.Create(CreateSuspended: Boolean);
begin
  inherited;

  EventWait:=TEvent.Create(nil,true,false,'');
  [...]
end;

destructor TmyThread.Destroy;
begin
  FreeAndNil(EventWait);
  [...]
  inherited;
end;
  
procedure TmyThread.Terminate;
begin
  inherited;

  EventWait.SetEvent;
end;

procedure TmyThread.Execute;
begin
  // Vorbereitungen, irgendwas machen
  [...]

  // Die Schleife, die alle paar Sekunden irgendwas machen soll,
  // bis der Thread beendet wurde.
  while (not Terminated) do begin
    [...]
    // mach was
    [...]

    // Warten, bis die Zeit abgelaufen ist oder das Event extern
    // ausgelöst (z.B. durch "Terminate", dort das SetEvent
    if not terminated then
      EventWait.WaitFor(sekunden*1000);

    // Event zurücksetzen für den evtl. nächsten Durchgang
    EventWait.Reset
  end;

  // ggf. Aufräumen
  [...]
end;
Ich hoffe, die Doku im Quellcode liefert dir schon genug Ansätze, sonst frag ruhig.

Bis denn
Bommel
  Mit Zitat antworten Zitat