Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   [C#] WorkQueue (https://www.delphipraxis.net/99448-%5Bc-%5D-workqueue.html)

phXql 12. Sep 2007 12:36


[C#] WorkQueue
 
Liste der Anhänge anzeigen (Anzahl: 2)
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

Gruber_Hans_12345 12. Sep 2007 13:05

Re: [C#] WorkQueue
 
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?

Elvis 12. Sep 2007 13:09

Re: [C#] WorkQueue
 
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.

phXql 12. Sep 2007 13:11

Re: [C#] WorkQueue
 
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...

alzaimar 12. Sep 2007 13:36

Re: [C#] WorkQueue
 
Vielleicht kann man hier Anleihen nehmen (Threadpool für VCL / WIN32 im DP-Opensource Bereich).


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 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