Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Thread Vs Timer !!! Wievile Threads sind zu viel ? (https://www.delphipraxis.net/8866-thread-vs-timer-wievile-threads-sind-zu-viel.html)

DataCool 16. Sep 2003 16:25

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Hi Luckie,

aber ich kann den Thread mit suspend anhalten(wenn er gerade schläft) ?

Na dann habe ich glaub ich mein Problem gefunden, warum meine App sporadisch sich mit der CPU-Last auf 98% hochschaukelt, wahrscheinlich kommt der Systemprocess nicht mehr mit dem Thread-Handling nach.
Ich habe nämlich ca. 10-15 Threads immer am laufen, die wie oben in Bsp. 1 beschrieben vorgehen nur ist der Sleep-Intervall da bei 500 ms bzw. 200 ms.

:oops: :oops:

Danke,

Data

neolithos 16. Sep 2003 16:49

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Versuch es mal mit Events und WaitForSingleObject.

Erstelle mal ein Bsp. Interessiert mich gerade selber! Geduld!

Luckie 16. Sep 2003 17:00

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Zitat:

Zitat von DataCool
Hi Luckie,
aber ich kann den Thread mit suspend anhalten(wenn er gerade schläft) ?

Ja, denn das setzt den Unterbrechungszähl des Thread-Objektes auf einen Wert größer null, womit der Thread nicht zuteilungsfähig wird. Aber Achtung Suspend ist akkumulativ. Mit jedem Aufruf wird der Unterbrechungszähler inkrememntiert. war er bei 0 (Thread zuteilungsfähig) und du rufst Suspend 3 mal auf mußt du auch 3 mal Resume aufrufen, damit der Thread wieder zuteilungsfähig wird.

neolithos 16. Sep 2003 17:21

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Delphi-Quellcode:
type
  TTimerThread = class(TThread)
  private
    hClose : Cardinal;
  public
    constructor Create;
    destructor Destroy; override;

    procedure CloseMe;
    procedure Execute; override;
  end;


{ TTimerThread }

procedure TTimerThread.CloseMe;
begin
  SetEvent(hClose);
end;

constructor TTimerThread.Create;
begin
  inherited Create(false);
  hClose := CreateEvent(nil, true, false, nil)
end;

destructor TTimerThread.Destroy;
begin
  CloseMe; // schleife beenden
  CloseHandle(hClose);
  inherited;
end;

procedure TTimerThread.Execute;
var dw : Cardinal;
begin
  repeat
    dw := WaitForSingleObject(hClose, 60000);
    if dw = WAIT_TIMEOUT then
       Windows.Beep(200, 200); // mache irgentwas
  until (dw = WAIT_OBJECT_0) or Terminated; // beendet
end;
Das könnte dir Helfen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 Uhr.
Seite 3 von 3     123   

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