![]() |
Parametrisierte Prozeduren in Joblisten speichern
Hallo zusammen, :hi:
ich sitze seit längerem an folgendem Problem (hoffe dir Rubrik ist richtig): Aus dem Forum habe ich erfahren, wie man eine Jobliste aufbaut, aus denen Threads jeweils ihre Aufgabe beziehen. Bis jetzt habe ich es so gelöst, dass der Auftrag als String gespeichert ist, der kommasepariert, Werte enthält, die später die auszuführende Prozedur bekommen soll. Aber ich möchte natürlich gerne viel flexibler und universeller Prozeduren + Parameter in der Jobliste speichern, denn sich ist mein Weg nicht gerade professionell... Ich habe mir ein Buch über Patterns gekauft, das aber alles anhand von Java erklärt, so dass ich nicht alles kapiere. Das Command-Muster scheint mir für meine Zwecke recht passend zu sein. Leider finde ich im allgemeinen wenig über Patterns im Zusammenhang mit Delphi. Außerdem wird im Buch nicht erklärt, wie ich parametrisierte Prozeduren in einer Liste speichere. Hat jedand einen Vorschlag oder gibt es einen bewährten Weg, mein Problem zu lösen? Kann man z.B. Pointer in die Liste schreiben und dieser Pointer zeigt auf eine Prozedur...? Wie könnte ich dann sicher den Pointer der Prozedur samt Parameter speichern und später die exakte Prozedur wieder korrekt ausführen? Oder ist das doch alles falsch gedacht? Würde mich freuen, wenn ihr da Rat habt... Gruß Pfoto |
Re: Parametrisierte Prozeduren in Joblisten speichern
Hi Pfoto. :hi:
Das Problem an der ganzen Sache ist, dass man einen Methodenaufruf nicht on-the-fly zusammenbasteln kann, sondern zumindest Anzahl und Typ der Parameter vorher feststehen müssen. Ich würde vorschlagen, eine vorgelagerte Funktion zu schreiben, etwa nach diesem Schema
Delphi-Quellcode:
und nur die Parameter für diese Funktion zu speichern.
uses
Variants; type TOneOfMyFunctions = (fnFormatC, fnCheckEMail, fnPlayMusic, fnShutdown); TParams = array of variant; function DelegateCall(fn : TOneOfMyFunctions; Param: TParams) : Variant; begin result := Null; case fn of fnCheckEMail: result := CheckEMail(param[0], param[1], param[2]); end; end; Gruß, Waldteufel |
Re: Parametrisierte Prozeduren in Joblisten speichern
Danke Waldteufel!
Es ist leider noch nicht der professionelle Weg, den ich mir vorgestellt habe... Nun habe ich jedoch noch ein bischen code im Netz gefunden, mit denen ich glaube, das Command-Pattern verstanden zu haben. Für alle die es interessiert:
Delphi-Quellcode:
Somit kann man für beliebige Aufgaben solche Command-Objekte erstellen,type TCommand = class public Procedure Execute; virtual; abstract; end; type TBefehlsObjektCommnd = class(TCommand) protected // Methoden ... Public Constructor Create(Wert1, Wert2, Wert3: integer); Procedure Execute; override; end; procedure TAddToListBoxCommnd.Execute; begin // Hier gezielt Befehl ausführen end; // Irgendwo im Programm, z.B. Jobliste: Joblist_Command: TCommand; Joblist_Command := TBefehlsObjektCommnd.Create(100, 200, 300); // Wenn z.B. Thread bereit ist, den Job auszuführen, ruft dieser auf: Joblist_Command.Execute; indem man sie vom Command-Objekt ableitet. Die Jobliste ist ebenfalls Command-Objekt-kompatibel, so dass dort verschiedene abfolgenden von Kommandos zwischengespeichert werden können. Vielleicht könnt ihr diese Dinge ja auch gebrauchen, z.B. auch sinnvoll für Undo-Redo-Geschichten oder Makros. Grüße Pfoto |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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 by Thomas Breitkreuz