Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Omni BackgroundWorker / Schedule (https://www.delphipraxis.net/178273-omni-backgroundworker-schedule.html)

haentschman 29. Dez 2013 13:13

Omni BackgroundWorker / Schedule
 
Moin Alle... :hi:

Gegeben:
- 1..n elektronische (Master)Geräte welche via HTTP ausgelesen werden
- jedes (Master)Gerät hat 1..256 Geräte. Diese wiederum haben 1..x auslesbare Parameter.

Soll:
- jeder auslesbare Parameter soll permanent ausgelesen werden. (Nacheinander)
- jedes (Master) Gerät parallel

Ist(Idee):
- jedes Mastergerät hat einen BackgroundWorker.
- Da werden die Geräteparameter als Items abgelegt und abgearbeitet.

Soweit so gut.

Problem:
Im Prinzip sollte die Menge an abrufbaren Parametern einen "Durchlauf" darstellen. Sind alle abgearbeitet geht es von vorn los.
1. Background Worker füllen
2. arbeiten lassen
3. Wenn fertig nach 1.

Wie kann ich die Menge an offenen Tasks im Schedule feststellen um bei 0 den Worker neu zu befüllen? Ich könnte mir vor dem Füllen das letzte Item merken und im OnRequest auswerten.
Gibt es da was besseres?

Danke

Mavarik 29. Dez 2013 14:18

AW: Omni BackgroundWorker / Schedule
 
Haussteuerung?

Ich würde die Worker einfach mitzählen. Oder habe ich da etwas falsch verstanden?

Mavarik

haentschman 29. Dez 2013 14:57

AW: Omni BackgroundWorker / Schedule
 
Danke erstmal...
Zitat:

Haussteuerung?
...nö. Datenlogger in industrieller Größenordnung 8-)
Zitat:

Ich würde die Worker einfach mitzählen.
Ich verfeinere das nochmal an einem Beispiel... :zwinker:
1. Gehen wir davon aus, daß 10 Parameter permanent zu lesen sind. (Schleife mit Abbruchbedingung)
2. die 10 "Kommandos" werden in die Queue "geladen"
3. die 10 werden einer nach dem Anderen abgearbeitet
4. erst wenn die Queue leer ist -> Start wieder mit 2.

Da die Abfragezeit der einzelnen "Kommandos" incl. Request nicht definiert ist, kann man das befüllen der Queue nicht statisch steuern. (Timer etc.) Als "Startbedingung" (2.) wollte ich eine leere Queue definieren. Leider finde ich im Bachgroundworker keine Property o.ä. um diesen Zustand definieren zu können.
Jedes "Kommando" hat sein Event beim Beenden. Dieses ist für alle gleich. Anhand der Parameter im Event könnte ich das "Kommando" identifizieren. Wenn ich mir vorher beim Befüllen das letzte "Kommando" merke könnte ich hier dann auf eine leere Queue schließen.

Meine Frage ist, ob es andere Möglichkeiten gibt die ich nicht gesehen habe.

PS: workItem.Task.Counter ist nil :( Da dachte ich schon ich hätte was gefunden.

BUG 29. Dez 2013 15:05

AW: Omni BackgroundWorker / Schedule
 
Zitat:

Zitat von haentschman (Beitrag 1241362)
Jedes "Kommando" hat sein Event beim Beenden. Dieses ist für alle gleich. Anhand der Parameter im Event könnte ich das "Kommando" identifizieren. Wenn ich mir vorher beim Befüllen das letzte "Kommando" merke könnte ich hier dann auf eine leere Queue schließen.

Die Idee, in diesem Event einfach eine Variable herunterzuzählen, ist dir nicht gekommen :gruebel:
Das Merken des letzten Kommandos halte ich gerade bei einem Workerpool für fehleranfällig, da es möglich währe, dass das Ende des letzten Kommandos das Vorletzte überholt.

haentschman 29. Dez 2013 15:14

AW: Omni BackgroundWorker / Schedule
 
Zitat:

Die Idee, in diesem Event einfach eine Variable herunterzuzählen, ist dir nicht gekommen
:lol: Nö...:oops: Ein eigener Counter ist die Lösung. Ich dachte nur der BackgroundWorker hat ne Art Liste der Items öffentlich und damit den Count.

Mavarik 29. Dez 2013 15:51

AW: Omni BackgroundWorker / Schedule
 
Zitat:

Zitat von Mavarik (Beitrag 1241359)
Ich würde die Worker einfach mitzählen.

hmm... s.o. ;-)

BUG 29. Dez 2013 16:24

AW: Omni BackgroundWorker / Schedule
 
Zitat:

Zitat von Mavarik (Beitrag 1241372)
hmm... s.o. ;-)

Deine Antwort war wohl ähnlich verständlich geschrieben wie die Frage :tongue: :mrgreen:


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