Autor |
Beitrag |
xman236
Hält's aus hier
Beiträge: 11
Erhaltene Danke: 1
|
Verfasst: Mo 28.02.11 22:09
Hat Jemand von TQueue gehoert ??
Ich habe naemlich eine Frage zum dequeue-Procedure. Das Procedure sieht wie unter aus.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TQueue.dequeue; var hilf : TKnoten; begin if not self.isEmpty then begin hilf := self.hatBug.nachfolger; self.hatBug.setzeNachfolger(hilf.nachfolger); if kenntEnde = hilf then kenntEnde := hatBug; hilf.destroy; end end; |
Das Procedure habe ich wie unten angewendet.
Delphi-Quelltext 1: 2: 3: 4:
| procedure TfrmMain.tiKassierenTimer(Sender: TObject); begin hKundeschlange.dequeue; end; |
Eigentlich soll das erste Element der hKundeschlange weggeloescht.Doch es wird auf dem Listbox nicht weggeloescht. Woran liegt das?
Moderiert von Martok: Quote- durch Delphi-Tags ersetzt
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.02.11 22:24
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mo 28.02.11 22:26
klingt nach
Generics.Collections.TQueue
D2009 +
Entfernt das oberste Element aus der Warteschlange.
Zitat: |
Dequeue entfernt das oberste Element aus der Warteschlange und gibt es zurück. Count wird um 1 dekrementiert. Wenn Count bereits 0 ist, wird ein Fehler ausgelöst.
Ein OnNotify-Ereignis zeigt an, dass ein Element aus der Warteschlange entfernt wurde. Dequeue entspricht Extract, außer dass der Ereigniscode angibt, dass ein Element entfernt und nicht extrahiert wurde.
Dequeue arbeitet ähnlich wie Peek, außer dass Dequeue ein Element aus der Warteschlange entfernt.
Dies ist eine O(1)-Operation.
|
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.02.11 22:28
An den deutschen Bezeichnern (und der geposteten Prozedur aus der Klasse) siehst du ja, dass es nicht die Standard-TQueue ist.
// EDIT:
Nebenbei gab es TQueue auch vor Delphi 2009 schon in der Unit Contnrs soweit ich mich entsinne.
|
|
xman236 
Hält's aus hier
Beiträge: 11
Erhaltene Danke: 1
|
Verfasst: Mo 28.02.11 22:30
Delphi-Quelltext 1: 2: 3: 4:
| procedure TfrmMain.tiKassierenTimer(Sender: TObject); begin hKundeschlange.dequeue; end; |
Das Procedure ist fuer mich eigentlich der Befehl, der das Element aus der Schlange wegloescht.
Ist das falsch?
Moderiert von Martok: Quote- durch Delphi-Tags ersetzt
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.02.11 22:30
Aus der Schlange ja, aber was hat das mit der Listbox zu tun? 
|
|
xman236 
Hält's aus hier
Beiträge: 11
Erhaltene Danke: 1
|
Verfasst: Mo 28.02.11 22:33
Delphi-Quelltext 1: 2: 3: 4:
| procedure TfrmMain.tiKassierenTimer(Sender: TObject); begin liKundeschlange.items.delete(0); end; |
Eigentlich war das mein Befehl. Der Lehrer hat mir aber gemeckert, dass ich nicht mit
der Schlange gearbeitet hast, sondern nur ausgetrickt habe. Deswegen habe ich jetzt dieses dequeue-Procedure verwendet.
Was willst du jetzt genau sehen?
Moderiert von Martok: Quote- durch Delphi-Tags ersetzt
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.02.11 22:35
Naja, aber irgendwo musst du genau diesen Befehl zum Löschen aus der Listbox ja trotzdem benutzen, sonst wird das auch nicht passieren.
Du könntest z.B. nach dem Löschen aus der TQueue die Daten daraus neu in die Listbox einlesen.
|
|
xman236 
Hält's aus hier
Beiträge: 11
Erhaltene Danke: 1
|
Verfasst: Mo 28.02.11 22:41
Eherlich gesagt, verstehe ich das Meckerei von dem Lehrer nicht ganz.
Unsere Aufgabe ich mit der Schlange (TQueue) ,was nach dem Moto : Immer der Reihe nach-
Wer zuerst kommt, ist auch zuerst dran, arbeitet, eine Supermarket-Kasse zu simulieren.
Ich habe eine Kundeschlange eingebaut und habe fuenf Kasse dargestellt. Die Kundeschlange
verteilt sich in die verschiedene Kasse und ihre Ware werden dort kassiert.
Da ich aber mit dem Befehl, liKundeschlange.items.delete(0); gearbeitet habe, koennen mehrere Kunde an den verschiedenen Kassen gleichzeitig weggeloescht werden,
was das Moto der Schlange, Immer der Reihe nach, schaedigt.
Ist das richtig, was der Lehrer hier meckert?
Moderiert von Martok: Quote- durch Delphi-Tags ersetzt
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 28.02.11 22:48
Schwachsinn, da du immer nur den obersten eintrag in der Listbox weglöscht. Das einzige was halt nicht dem Konzept der Warteschlange entspricht ist, das du eben auch den 5 löschen könntest mit dem befehl wenn du als parameter 4 statt 0 übergibst. und das wird vermutlich auch das argument deines Professors gewesen sein.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 28.02.11 22:50
Hey,
so wie du das gemcht hast geht das natürlich auch, aber wenn die Aufgabe heißt, das ihr dazu eine TQueue benutzen sollt, dann musst du dich danach richten. Ansonsten wäre das Thema verfehlt - 6 setzten (so nach dem Motto).
Wir mussten sowas auch mal in der Schule machen. Dabei sollten Daten und GUI getrennt werden. Also die wartenden Kunden in der TQueue und eine extra Methode, die die daten (die Kunden) dann in der GUI darstellt. Wenn du das so machst, dann meckert deni Lehrer bestimmt nicht mehr
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|