AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Thread soll eine Minute warten: Sleep oder Timer?
Thema durchsuchen
Ansicht
Themen-Optionen

Thread soll eine Minute warten: Sleep oder Timer?

Ein Thema von Bbommel · begonnen am 2. Feb 2009 · letzter Beitrag vom 13. Mär 2021
Antwort Antwort
Bbommel

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

Re: Thread soll eine Minute warten: Sleep oder Timer?

  Alt 3. Feb 2009, 09:59
Hallo Sirius, hallo zusammen,

eine Nachfrage habe ich noch zu deinem Ansatz.

Zitat von sirius:
Delphi-Quellcode:
constructor Tmythread.Create(CreateSuspended: Boolean);
begin
  inherited Create(false); // <----- muss das wirklich "false" sein?
  FEvent:=TEvent.Create(nil,true,false,'');
end;

[...]

procedure Tmythread.execute;
begin
  while not terminated do
  begin
    DoSomething;
    FEvent.ResetEvent; // <----- ist das hier wirklich sinnvoll?
    FEvent.WaitFor(10000);
  end;
end;
Es geht mir um die markierten Stellen:

1. Create: Du rufst den Vorgänger immer mit "false" auf - machst du das, weil sonst die Gefahr besteht, dass das Execute schon losrennt, bevor das Create durch ist? Das heißt, wenn ich will, dass der Parameter noch weiter beachtet wird, müsste das Create vollständig so aussehen:
Delphi-Quellcode:
constructor Tmythread.Create(CreateSuspended: Boolean);
begin
  inherited Create(false);
  FEvent:=TEvent.Create(nil,true,false,'');

  if not CreateSuspended then
    Resume;
end;
Edit: Da hatte ich wohl Tomaten auf die Augens und true und false verwechselt - Die richtige Frage wäre also: Warum startest du den Thread IMMER als nicht-suspended?

2. ResetEvent: Ist das nicht eher störend? Das Event startet doch durch die Parameter bei Create eh als nicht gesetzt. Durch dieses Reset könnte doch nun folgendes passieren: Nehmen wir an, DoSomething dauert ein paar Sekunden (eben jene Datenbank-Abfrage beispielsweise) und während diese DoSomething läuft, wird der Thread terminiert und damit das Event gesetzt. Nach dem DoSomething wird es aber erst mal zurückgesetzt, was bedeutet, dass noch mal 10 Sekunden lang ein WaitFor aufgerufen wird, obwohl man das eigentlich gar nicht mehr braucht. Oder? Mein (sinnloser) Demo-Thread funktioniert jedenfalls auch ohne das Reset genau wie gewünscht.

Verzeiht meine vielen Nachfragen. Wie gesagt, ich bin halt noch neu im Thema Threads und möchte so gut wie möglich verstehen, was ich da tue, bevor ich das in Produktiv-Systeme einbaue.

Bis denn
Bommel
  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 13:45 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