AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie kann man das Ausführen der Threads Priorisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann man das Ausführen der Threads Priorisieren

Ein Thema von ManSues · begonnen am 25. Mär 2014 · letzter Beitrag vom 26. Mär 2014
Antwort Antwort
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Wie kann man das Ausführen der Threads Priorisieren

  Alt 25. Mär 2014, 19:29
Warum schreiben die alle in die gleiche Liste? Mach doch für jeden Thread eine eigene Liste, und dann arbeitest du die Listen im Hauptthread nach Priorität ab.

Geändert von Namenloser (25. Mär 2014 um 19:34 Uhr)
  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
 
#2

AW: Wie kann man das Ausführen der Threads Priorisieren

  Alt 25. Mär 2014, 19:48
Also generell kann man so etwas mit einem Delphi-Referenz durchsuchenTEvent lösen
Delphi-Quellcode:
type
  TFoo = class
  private
    FThrottle : TEvent;
    FCS : TCriticalSection;
    procedure ReleaseThrottle;
  public
    constructor Create;
    destructor Destroy; override;

    procedure DoSomethingThrottled;
    procedure DoSomethingDifferent;
  end;

implementation

{ TFoo }

constructor TFoo.Create;
begin
  inherited Create;
  FThrottle := TEvent.Create( nil, False, False, '' );
end;

destructor TFoo.Destroy;
begin
  FThrottle.Free;
  FCS.Free;
  inherited;
end;

procedure TFoo.DoSomethingDifferent;
begin
  FCS.Enter;
  try
    // Aus der Liste holen
  finally
    FCS.Leave;
  end;
  ReleaseThrottle; // dem nächsten Thread den Zugang erlauben
end;

procedure TFoo.DoSomethingThrottled;
begin
  if FThrottle.WaitFor = TWaitResult.wrSignaled
  then
  begin
    FCS.Enter;
    try
      // In die Liste Legen
    finally
      FCS.Leave;
    end;
  end;
end;

procedure TFoo.ReleaseThrottle;
begin
  FThrottle.SetEvent;
end;
Der Hauptthread ruft jetzt immer DoSomethingDifferent auf und alle SubThreads rufen DoSomethingThrottled auf.
Der Event sorgt dafür, dass immer nur ein Thread durchschlüpfen kann und der nächste Thread, wenn im DoSomethingDifferent das ReleaseThrottle aufgerufen wird.

Über Sinn und Unsinn mag ich hier jetzt nicht diskutieren, aber es geht

PS Die CriticalSection ist natürlich bei einer ThreadList unnötig
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
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:30 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 by Thomas Breitkreuz