AGB  ·  Datenschutz  ·  Impressum  







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

mehrere forms überwachen

Ein Thema von snook · begonnen am 17. Aug 2010 · letzter Beitrag vom 18. Aug 2010
Antwort Antwort
snook

Registriert seit: 25. Jun 2010
94 Beiträge
 
Delphi 2005 Professional
 
#1

mehrere forms überwachen

  Alt 17. Aug 2010, 12:14
hey,

ich habe in meiner anwendung mehrere von TForm abgeleitete Formulare zu laufen, die über eine GPIB kommunikation mit verschiedenen Geräten kommunizieren. ich versuche gerade das ganze möglichst stabil zu gestalten. daher war mein erster gedanke, packe ich jedes Formular in ein thread und wenn eines abraucht, stört das mein maniform herzlich wenig. bevor ihr aufschreit, ich weiß das die vcl nicht thread sicher ist, daher habe ich das gleich wieder verworfen.

jetzt ist eure kreativität gefragt. gibt es eine möglichkeit mein gesamtes programm vor dem absturz zu bewahren, falls ein gerät (Form) aus irgendwelchen gründen abstirbt? bevor jetzt kluge kommentare zur programmierung der geräte kommen, für die bin ich nicht verantwortlich. die werden von anderen leuten erstellt und meine aufgabe ist es einfach nur diese in einem hauptprogram zu verwalten.

ich bin echt für jede hilfe dankbar

viele grüße
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: mehrere forms überwachen

  Alt 17. Aug 2010, 12:23
Der Ansatz hier überhaupt Formulare zu verwenden ist nicht sinnvoll.

Ich würde eine Klasse schreiben welche die Kommunikation übernimmt.
Dann eine Wrapperklasse welche die Klasse in einen Thread verlegt und für die Synchronisierung zuständig ist.
Das dann noch über entsprechende Basisklassen und Claas-Faktories so aufbauen das du an zentraler Verwaltungsstelle nicht mehr mit eigenheiten der Geräte zu tun hast sondern nur noch mit den Basisklassen arbeitest.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: mehrere forms überwachen

  Alt 17. Aug 2010, 12:29
Ich würde (und habe auch schon mehrfach) hier eine Threadbasierte/VCL-freie Basisklasse schreiben und Gerätespezische Ableitungen basteln.
Die Basisklasse kann beliebige auch virtuelle Methoden zur synchronisation beinhalten.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
snook

Registriert seit: 25. Jun 2010
94 Beiträge
 
Delphi 2005 Professional
 
#4

AW: mehrere forms überwachen

  Alt 18. Aug 2010, 12:40
okay wie würde denn das aussehen? ich kapsel die kommunikation in einen thread und kappe die gesamte grafische oberfläche ab?
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#5

AW: mehrere forms überwachen

  Alt 18. Aug 2010, 12:56
Ob die Kommunikation nun in einem eigenen Thread oder auch im Mainthread der Applikation laufen kann, kommt ja hauptsächlich drauf an, wie "blockierend" die Kommunikation an sich ist.
Aber die Kommunikation generell komplett von der GUI zu trennen, ist schon einmal eine sehr gute Idee
Dann kannst du nacher auch die GUI komplett austauschen, ohne dass du damit die Kommunikation beeinflusst.
Also den kommunkations-Code in eigene Klassen / Units kapseln oder auch in ein Datenmodul oder sowas in der Art, aber nicht in den Code der Form(s), denn das würdest du bald bereuen
Was meinst du eigentlich mit "wenn ein Gerät abstirbt"? Wenn die Kommunikation zusammenbricht? Das sollte generell mit der GUI gar nichts zu tun haben, sondern das soll die Kommunkations-Klasse abfangen können und eventuell dann eine Nachricht an die GUI senden können (oder die GUI pollt den Status, je nachdem was du genau vorhast), aber nicht so, dass dann die GUI abraucht

Ich habe so etwas auch schon einmal gemacht, ein Programm, dass drei Geräte überwacht.
Dazu habe ich mir erstmal die Kommunkations-Klasse für die Datenstrukturen und Befehle des Gerätetyps an sich geschrieben, im Programm dann selbst ein Datenmodul, das Instanzen dieser Geräte erzeugt / registriert und die Kommunkation der Geräte unter sich koordiniert. Die GUI-Forms an sich empfangen und senden dann nur noch Events vom Datenmodul, sind also reine Anzeigen und Empfänger für Tastatur-Mausangaben, die aber an die Logik-Schicht übergeben werden, die dann wiederum die Events feuert usw.

Somit habe ich dann drei Teile, die einzeln wartbar sind:
1) Kommunkations-Klasse für das Geräte-Protokoll (Klasse)
2) Logik-Schicht, die die Geräte-Instanzen koordiniert (Datenmodul)
3) GUI, die User-Eingaben annimmt und Meldungen anzeigt. (Forms)

Ausblick / Erweiterungen:
Was sich bei einer Geräte-Verwaltung nach meiner Erfahrung zudem noch anbietet, ist eine Art Scripting-API für das Programm und dessen Events, vor Allem dann, wenn es sich bei der Software oder sogar dem Gerät selbst um einen Prototypen handelt, bei dem noch nicht alle Gegebenheiten klar sind.
Dann macht es Sinn, die Events und Funktionen von Kommunkations- Logik- und GUI-Schicht, durch eine API-Schnittstelle nach Aussen hin zugänglich zu machen und die Verbindungen über Scripting zu realisieren. Das hat den Vorteil, dass der Kunde teilweise selbst festlegen kann, was angezeigt / gemacht werden soll, wenn ein bestimmtes Ereignis eingetreten ist. Gute Erfahrungen habe ich hier mit Lua gemacht, für Delphi bietet sich aber wahrscheinlich PascalScript mehr an.

Geändert von blackfin (18. Aug 2010 um 13:20 Uhr)
  Mit Zitat antworten Zitat
snook

Registriert seit: 25. Jun 2010
94 Beiträge
 
Delphi 2005 Professional
 
#6

AW: mehrere forms überwachen

  Alt 18. Aug 2010, 13:59
mit absterben meine ich so ziemlich alles was ein programm zum hängen bringen kann. ich bin für die gerätetreiber nicht verantwortlich, den schreiben die user je nach bedarf. da können dann so schöne sachen wie endlosschleifen mal ganz schnell passieren, oder es gibt AV's weil beim lesen der config was nicht hinhaut und der klassiker ist natürlich ein loses kabel, sodass die kommunikation zusammenbricht. das würde ich halt alles gerne vom gerätecontroller heraus abfangen können (dem ist es ja egal warum ein gerät nicht mehr reagiert).
danke schonmal für die struktur, die klingt ja ganz vernünftig
  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 02:34 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