AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Parametrisierte Prozeduren in Joblisten speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Parametrisierte Prozeduren in Joblisten speichern

Ein Thema von Pfoto · begonnen am 10. Jul 2006 · letzter Beitrag vom 12. Jul 2006
Antwort Antwort
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#1

Parametrisierte Prozeduren in Joblisten speichern

  Alt 10. Jul 2006, 17:35
Hallo zusammen,

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
Jürgen Höfs
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#2

Re: Parametrisierte Prozeduren in Joblisten speichern

  Alt 10. Jul 2006, 17:54
Hi Pfoto.

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:
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;
und nur die Parameter für diese Funktion zu speichern.

Gruß,
Waldteufel
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Parametrisierte Prozeduren in Joblisten speichern

  Alt 12. Jul 2006, 18:24
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:

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;
Somit kann man für beliebige Aufgaben solche Command-Objekte erstellen,
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
Jürgen Höfs
  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 04:36 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