AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

events und Listen

Offene Frage von "Alex2.2"
Ein Thema von Alex2.2 · begonnen am 26. Nov 2007 · letzter Beitrag vom 3. Jan 2008
Antwort Antwort
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
ChristianZ

Registriert seit: 5. Feb 2006
Ort: Essen
10 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: events und Listen

  Alt 28. Nov 2007, 00:52
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
Christian Ziegelt
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: events und Listen

  Alt 28. Nov 2007, 10:53
Zitat von ChristianZ:
Um das Event zu nutzen, müsstest Du im Thread Application.ProcessMessages() aufrufen - in der Execute Routine des Threads.
Du willst den VCL Thread aus einem anderen Thread aus direkt anstossen bzw. aufrufen? Wie wäre es mit Synchronize? Schliesslich ist das der eigentliche Weg der Synchronisation von Events in den VCL Thread.

Zitat von ChristianZ:
Auf anderem Wege bin ich bisher nicht an die Events gekommen.
Welche Events meinst du?

Zitat von ChristianZ:
Scheinbar ist es aber generell möglich, einem Thread Nachrichten zu schicken, wenn man ihm ein "Fenster" mit CreateWnd() erzeugt, und eine Ereignissbehandlungs routine.
Behandelst du auch die anderen nötigen Nachrichten zur Fensterstellung?
  Mit Zitat antworten Zitat
Alex2.2

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

Re: events und Listen

  Alt 3. Jan 2008, 15:05
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
  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 06:31 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