Thema: Delphi events und Listen

Einzelnen Beitrag anzeigen

Alex2.2

Registriert seit: 19. Mai 2006
17 Beiträge
 
#1

events und Listen

  Alt 26. Nov 2007, 13:32
Hallo Leute,
Ich bin mal wieder am Ende meiner Weisheit. Ich betreibe gerade den verzweifelten Versuch einen Application Guardian zu schreiben. Dafür habe ich einen TCP IP Server und ein Client Object geschrieben. Der Client sendet beim Eintritt in einen zu kontrollierenden Codeabschnitt ein Signal an den Server, das eine Applcation Id, Thread Id, und Programcode Id und Zeitangabe enthält. Der Server baut eine Struktur aus Apllications, Threads und Codeparts auf und kontrolliert, ob die Codeabschnitte von den verschiedenen Applikationen, und Threads sich noch regulär verhalten. Die Kommunikation klappt ganz gut. Anhand von Kontrollausgaben war das deutlich zu sehen. Aber - und da liegt der Hund begraben - die Kontrollkomponenten, die ich hergestellt und von TComponent abgeleitet habe, enthalten verständlicherweise einen TTimer der bei irregulären Verhalten einen Timerevent feuert und genau den bekomme ich nicht durchgereicht bis zur Applikationsebene.

Hier die Komponente für Codeparts :
Delphi-Quellcode:
  TCodePart = class(TComponent)
  private
    FTimeOut: TTimer;
    FTimeLimitAlarm : Boolean;
    FId : Integer;
    FTimeLimitExeeded : TNotifyEvent;
    FSignal : TGuardianSignal;
    procedure TimeOutTimer(Sender: TObject);
  public
    Property LastSignal : TGuardianSignal read FSignal write FSignal;
    { Public declarations }
  published
    constructor create(AOwner: TComponent); override;
    procedure Start;
    procedure Stop;
    procedure setTimeOut(Value: Integer);
    function getTimeOut: Integer;
    procedure setActive(Value: Boolean);
    function getActive: Boolean;
    Property TimeLimeExeeded : Boolean read FTimeLimitAlarm write FTimeLimitAlarm;
    Property TimeLimit : Integer read getTimeOut write SetTimeOut;
    Property Active : Boolean read getActive write setActive;
    Property Id : Integer read FId write FId;
    property onTimeLimitExeeded : TNotifyEvent read FTimeLimitExeeded write FTimeLimitExeeded;
  end;
die Threadcontrollerkomponente ist davon abgeleitet
Delphi-Quellcode:
  TThreadModul = class(TCodePart)
  private
     FCodePartTimeout: TNotifyEvent;
     FCodePartList: TComponentList;

     ListSecure : TCriticalSection;

     procedure CodePartTimeOut(Sender: TObject);
  public
     property CodeParts : TComponentList read FCodePartList write FCodePartList;
  published
     constructor create(AOwner: TComponent); override;
     property onCodePartTimeout : TNotifyEvent read FCodePartTimeout write FCodePartTimeout;
     procedure enterCodePart(Signal: TGuardianSignal);
     procedure exitCodePart(Signal: TGuardianSignal);
     procedure refreshCodePart(Signal: TGuardianSignal);
     procedure StopAll;
  end;
Diese Codepartkomponente könnte, bei verschachtelten Funktionsaufrufen innerhalb der kontrollierten Application (oder des Threads gewissermaßen Teil eines Stacks sein. Daher muß ich mehrere Instanzen davon in einer Threadkontrollierenden Komponente vorsehen. Nur von welcher Komponente oder Klasse kann ich so einen "Stack" ableiten? TComponentlist, wie in den Listing zu sehen, scheint dafür nicht geeignet, weil die Eventhandler der TCodepart Componenten irgendwie verloren gehen.

Wer weiß da Rat?

Danke für Eure Hilfe
  Mit Zitat antworten Zitat