![]() |
events und Listen
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:
die Threadcontrollerkomponente ist davon abgeleitet
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;
Delphi-Quellcode:
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.
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; Wer weiß da Rat? Danke für Eure Hilfe |
Re: events und Listen
Das ist vermutlich ein generelles Problem das bei Treads und Events von Componenten auftaucht.
Ich suche gerade selber nach einer solchen Lösung. Um das Event zu nutzen, müsstest Du im Thread Application.ProcessMessages() aufrufen - in der Execute Routine des Threads. Auf anderem Wege bin ich bisher nicht an die Events gekommen. Falls sich ein Weg ergeben sollte, bin ich ebenfalls sehr interessiert. Scheinbar ist es aber generell möglich, einem Thread Nachrichten zu schicken, wenn man ihm ein "Fenster" mit CreateWnd() erzeugt, und eine Ereignissbehandlungs routine. Gruß Christian |
Re: events und Listen
Zitat:
Zitat:
Zitat:
|
Re: events und Listen
Ok. Das mit dem Syncronisieren war die Ursache, meiner Probleme. Ich habe geglaubt mit einem einfachen Mutex ist das Problem gelöst, war es jedoch nicht. Hier ist wirklich ein Syncronize notwendige gewesen. Zu dumm, aber Dank an alle
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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-2025 by Thomas Breitkreuz