AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte [C#] WorkQueue
Thema durchsuchen
Ansicht
Themen-Optionen

[C#] WorkQueue

Ein Thema von phXql · begonnen am 12. Sep 2007 · letzter Beitrag vom 12. Sep 2007
Antwort Antwort
Benutzerbild von phXql
phXql
Registriert seit: 11. Mär 2004
Hallo Leute,

ich habe für ein Projekt eine Workqueue gebraucht, deswegen hab ich mich schnell hingesetzt und eine geschrieben.
Dieser Klasse kann man Jobs zu einer Liste hinzufügen, und diese werden dann von einem Hintergrundthread abgearbeitet. Man kann auch mehrere Jobs gleichzeitig abarbeiten lassen.

Das ganze Ding ist ein bisschen dokumentiert, die Lizenz ist die MPL-Lizenz (d.h. ihr könnt den Code verwenden wo ihr wollt, egal ob kommerziell oder nicht. Das einzige was ich will, ist, dass ihr, wenn ihr an dem Ding was ändert, die Änderungen allen zugänglich macht.)

Ein Job-Objekt muss das Interface IJob implementieren und ein Referenztyp sein. Als Basisklasse kann man AbstractJob hernehmen, dieses implementiert die wichtigstem Member von IJob.

Viel Spaß damit. Für Feedback, Kritik & Anregungen bin ich natürlich immer offen

// Edit: Noch ne kleine Demo hinzugefügt.

phXql
Angehängte Dateien
Dateityp: zip workqueue_947.zip (2,7 KB, 7x aufgerufen)
Dateityp: zip program_803.zip (698 Bytes, 2x aufgerufen)
 
Gruber_Hans_12345

 
Delphi 2007 Professional
 
#2
  Alt 12. Sep 2007, 13:05
Ist dieses Teil ein ersatz für das Threadpool von .net selber?

Habe beim Threadpool das problem, das es nur 25 gleichzeitige Threads zulässt, und die SetMaxThread mit bds2006 noch nicht gibt.
Gibt es bei deiner implementierung eine limitierung der gleichzeitigen Threads

bzw. was ist schlechter/besser als der standard Threadpool?
  Mit Zitat antworten Zitat
Elvis

 
Delphi 2010 Professional
 
#3
  Alt 12. Sep 2007, 13:09
Das Prblem was ich hier sehen ist, dass Threading damit ähnlich umständlich ist wie mit dem TThread in der VCL.
Man kann nicht einfach eine anonyme Methode übergeben, man muss tatsächlich sein eigene Klasse schreiben um etwas auszuführen.
Außerdem kannst du immer nur Jobs vom gleichen Typ in einem Queue haben.
Besser wäre es wenn du alle deine Jobs in einem Queue verwalten könntest um so an einer Stelle den Workload deiner App verwalten zu können.

@Hans, den Threadpool aus 1.1 würde ich nichtmal mit Stahlhandschuhen anfassen. Schaue mal bei CodeProject, da gab es irgendwo einen brauchbaren ThreadPool.
Das Viech was MS da für 1.1 verbrochen hat kostet zuviel Zeit & Ressourcen.
Robert Giesecke
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql
 
#4
  Alt 12. Sep 2007, 13:11
Ich hab nur bis 10 Threads getestet, kannst ja mal ausprobieren. Aber im Prinzip müsste das unendlich viele Threads erstellen können, da geht dir nur der Speicher aus oder dein OS schiebt ein Riegel vor.

Ich kenn vom .NET Threadpool nur den Backgroundworker, und der hat das Problem, dass er nur einen Job gleichzeitig bearbeitet.

@Elvis: Ja, das ist absichtlich so gemacht worden, ich bin nich sonderlicher Fan von anonymen Methoden. Aber was sollte mich daran hindern, unterschiedliche Jobtypen zu verwenden? Dann benutze ich halt eine WorkQueue<IJob> und schon kann ich da jeden Job reinstopfen... Oder macht mir wieder was lustiges von dem Generika-Zeugs ein Strich durch die Rechnung?

// Edit: Hm, wenn man das ganze statt mit Job-Objekten mit Delegates machen würde, dann könnte man auch anonyme Methoden verwenden...
  Mit Zitat antworten Zitat
alzaimar

 
Delphi 2007 Enterprise
 
#5
  Alt 12. Sep 2007, 13:36
Vielleicht kann man hier Anleihen nehmen (Threadpool für VCL / WIN32 im DP-Opensource Bereich).
  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 18:11 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