Dankesehr für die interessanten Vorschläge.
Ich habe mal die Frage ob man Sleep() benutzen sollte, ich meine das verwendet auf manchen Platformen ntern
Applications.ProcessMessages.
Wäre nicht ein Timer oder WaitFor sicherer ?
Ich hatte versucht mir das mit Generics in eine abgeleitete Klasse zu basteln,
damit ich noch spezifisches Payload als Parameter und Feedback als Result-Wert mit übergeben kann.
Damit kann ich dann auch anonyme Prozeduren benutzen.
Das ist zwar noch etwas unsauber und unübersichtlich, weil viel TestCode suboptimal drin ist, aber funktioniert gut und zuverlässig.
Sieht ungefähr so aus, geht sicher einfacher, und ich muss das mal aufräumen wenn Zeit ist ...
Delphi-Quellcode:
// Definiert eine universelle Message-Ableitung, mit PAyload und Feedback
type
TMsgLink<T1, T2> = class(TMessage)
private
FPayload : T1;
FFeedback : T2;
protected
constructor Create(const Payload : T1; const CbFkt : T2); overload;
public
procedure SendToSubscriber(const Sender : TObject); //(xVal : T1);
property Payload : T1 read FPayload write FPayload;
property Feedback : T2 read FFeedback write FFeedback;
end;
// Definiert ein Boolean Callback, z.B. als Handled True/False
type
TMsgFeedback_Boolean = TMsgFeedback<Boolean>;
// Definiert einen Parameter Record als PAyload für SendMEssage
type
TMsgPayload = record
public
FCmd : Integer;
FCmdSub : Integer;
FText : String;
procedure Setup(const iCmd, iCmdSub : Integer; sTxt: String);
//procedure SetText(const sTxt : String);
public
property Cmd : Integer read FCmd write FCmd;
property CmdSub : Integer read FCmdSub write FCmdSub;
property Text : String read FText write FText;
end;
// Baut alles zusammen zu einer einfachen MskLink Klasse
type
TMsgLink_Cmd_Base = class (TMsgLink<TMsgPayload, TMsgFeedback_Boolean>)
constructor Create(const iCmd, iCmdSub : Integer;
const strTxt : String;
const fktAsw : TProc<TObject, Boolean>
); overload;
constructor SendMessage(const ACmp : TObject;
const iCmd : Integer; iCmdSub : Integer = 0; const sTxt : String = '';
const fktAsw : TProc<TObject, Boolean> = nil;
bQueue : Boolean = True
); overload;
end;
// So kann ich verschiedene, speziele MsgLinks aufbauen, für verschiedene Aufgaben
Rollo