AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TQueue<T> - Aufträge prioritisieren

Ein Thema von himitsu · begonnen am 12. Dez 2011 · letzter Beitrag vom 12. Dez 2011
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

TQueue<T> - Aufträge prioritisieren

  Alt 12. Dez 2011, 09:09
Delphi-Version: 2010
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
$2B or not $2B
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#2

AW: TQueue<T> - Aufträge prioritisieren

  Alt 12. Dez 2011, 09:15
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".
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: TQueue<T> - Aufträge prioritisieren

  Alt 12. Dez 2011, 09:28
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".
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#4

AW: TQueue<T> - Aufträge prioritisieren

  Alt 12. Dez 2011, 11:24
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?
War das nicht der prinzipielle Unterschied zwischen Queue und Stack, dass man bei einem von beiden (ich meine es war der Stack) auch "Zwischenelemente" ansehen darf und bei der Queue wirklich stupide nur das vorderste Element?
  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
 
#5

AW: TQueue<T> - Aufträge prioritisieren

  Alt 12. Dez 2011, 11:42
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?
War das nicht der prinzipielle Unterschied zwischen Queue und Stack, dass man bei einem von beiden (ich meine es war der Stack) auch "Zwischenelemente" ansehen darf und bei der Queue wirklich stupide nur das vorderste Element?
Es handelt sich hierbei um die Umsetzung von
Stack = LiFo (Last In - First Out)
Queue = FiFo (First In - First Out)
und nicht mehr.

Weitere Spezialitäten muss man selber implementieren.
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: TQueue<T> - Aufträge prioritisieren

  Alt 12. Dez 2011, 13:15
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.
$2B or not $2B

Geändert von himitsu (12. Dez 2011 um 16:05 Uhr) Grund: Stack > TStack
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

AW: TQueue<T> - Aufträge prioritisieren

  Alt 12. Dez 2011, 13:23
Es gibt da so verschiedene Datenstrukturen:Eine Priority Queue könnte für deine Anforderungen wohl passend sein.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#8

AW: TQueue<T> - Aufträge prioritisieren

  Alt 12. Dez 2011, 15:05
Der Stack kann doch auch mehr?
er kann ebenfalls FiFo und man kann das Zeugs, oben und/oder unten reinschieben, sowie oben und/oder unten rausholen.
Wie soll das denn gehen?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: TQueue<T> - Aufträge prioritisieren

  Alt 12. Dez 2011, 15:40
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.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#10

AW: TQueue<T> - Aufträge prioritisieren

  Alt 12. Dez 2011, 16:57
Er denkt vermutlich an die Delphi Klasse "TStack"
Ich hatte dabei an die Klasse TStack<T> gedacht, konnte aber (zumindest unter XE2) keine Möglichkeit erkennen, wie man diese als FiFo nutzen oder gar Elemente irgendwo aus der Mitte herausziehen könnte. Vielleicht übersehe ich da ja auch etwas?

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>?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 14:04 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