![]() |
Delphi-Version: 2010
TQueue<T> - Aufträge prioritisieren
Hab ich das falsch gesehn, oder kann man bei der TQueue Aufträge nicht "löschen", also mittendrin entfernen,
bzw. nach einer Prioritisierung vorzeitig abarbeiten? Also im Prinzip muß ich das dann wohl wieder selber implenentieren? (oder, da Delphi mal wieder nur halbfertiges Zeug anbietet, mir den Stoff wo anders besorgen) Oder gibt es doch schon was Fertiges? (im Notfall müßte ich mir dann wohl eine TList<T> dafür erweitern) 'nen schnen Tag noch :hi: |
AW: TQueue<T> - Aufträge prioritisieren
Findest du das rumfrickeln in einer Queue nicht etwas umständlich?
Ein Auftrag könnte/sollte doch vor Ausführung prüfen, ob er noch valide ist. Das Löschen ist problematisch bei den Aufträgen, die gerade für die Prozessierung entnommen, aber noch nicht (ganz) ausgeführt wurden. Sind sie (noch) gültig oder (schon) ungültig? Diese Frage wird sich natürlich während der Ausführung immer wieder stellen, aber die Definition ist dann einfacher. Es ist kniffelig zu beschreiben, das zum Zeitpunkt X alle Aufträge mit einer bestimmten (nun ungültigen) Eigenschaft aus der Queue zu löschen sind und die, die gerade entommen wurden, auch, aber die die schon teilweise ausgeführt werden, nicht. Einfacher ist es imho so: "Vor der Durchführung prüft der Auftrag, ob alle Startbedingungen erfüllt sind und führt den Auftrag aus". |
AW: TQueue<T> - Aufträge prioritisieren
Die Aufträge sind alle Valide, beim Einfügen.
Es sollte nur eine Möglichkeit geben, Aufräge mit höheren Prioritäten früher auszuführen. Aktuell hab ich mir mit 2 Queues geholfen. - eine für "sofort, bzw. so schnell wie möglich bearbeien" - eine für "wenn du mal Zeit hast" Eine/Zwei Queue deswegen, weil die Einzelaufträge, je Priorität, nur in der Reihenfolge verarbeitet werden sollen, wie sie reinkommen. Sonst hätte ich auch eine Liste, bzw. einen Stack nehmen können und hätte das Wichtigere einfach vorn angehängt, aber dann stimmt die Reihenfolge nicht mehr. Und ansonsten wollte ich eben noch eine Funktion einfügen, für die Endverbraucher der Komponente, ala "schau ob ein Auftrag in der Queue liegt" oder "füge nur ein, wenn noch kein gleichnamiger Auftrag in der Liste existiert" und vorallem "brich alle Aufträge mit bestimmten Namen ab". |
AW: TQueue<T> - Aufträge prioritisieren
Zitat:
|
AW: TQueue<T> - Aufträge prioritisieren
Zitat:
Stack = LiFo (Last In - First Out) Queue = FiFo (First In - First Out) und nicht mehr. Weitere Spezialitäten muss man selber implementieren. |
AW: TQueue<T> - Aufträge prioritisieren
Der TStack kann doch auch mehr?
er kann ebenfalls FiFo und man kann das Zeugs, oben und/oder unten reinschieben, sowie oben und/oder unten rausholen. |
AW: TQueue<T> - Aufträge prioritisieren
Es gibt da so verschiedene Datenstrukturen:Eine Priority Queue könnte für deine Anforderungen wohl passend sein.
|
AW: TQueue<T> - Aufträge prioritisieren
Zitat:
|
AW: TQueue<T> - Aufträge prioritisieren
Er denkt vermutlich an die Delphi Klasse "TStack", andere haben den eigentlichen Stack aus der Prozessorarchitektur im Kopf ;) (Letzterer ermöglicht diesertage aber auch oft "Mittenrauslesen", z.B. der FPU Stack. Das war aber noch nicht so, als man das Wort mit seiner ursprünglichen Bedeutung belegt hat.)
|
AW: TQueue<T> - Aufträge prioritisieren
Zitat:
Andererseits würde es mir auch nicht einleuchten, wenn TStack<T> bereits als LiFo und als FiFo genutzt werden kann, warum dann überhaupt noch ein TQueue<T>? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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-2025 by Thomas Breitkreuz