Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fragen zum TThread, Programm absturzsicher? (https://www.delphipraxis.net/128789-fragen-zum-tthread-programm-absturzsicher.html)

BAMatze 6. Feb 2009 07:51


Fragen zum TThread, Programm absturzsicher?
 
Hallo @ all,

Ich hab einige Fragen zu der Komponente TThread. Ich möchte für ein Projekt, bei dem wichtige Daten erzeugt werden, soll Absturz sicher gemacht werden. Dazu möchte ich das Programm wie folgt aufbauen:

Der durch den Start erzeugte Thread soll als so eine Art Sicherheitsthread dienen, der rein nur die Daten für mich sichert, die erzeugt werden. Damit möchte ich verhindern (was bei uns schonmal in der Firma passiert ist, dass nach 2h Computerarbeitszeit und einem Programmabsturz sämtliche Daten verloren gehen). Dieser Sicherheitsthread soll den eigentlichen Arbeitsthread erzeugen und in dem wird eigentlich sämtliche Arbeit erledigt.

Jetzt meine Frage: Wenn ich eine Exception in dem Arbeitsthread bekomme, führt das auch zu einem kompletten Programmabsturz oder wird dann nur der Arbeitsthread tot gemacht oder führt es auch zu einem kompletten Programmabsturz? Wenn es einen kompletten Programmabsturz gibt, kann man dies auf irgendeine Art verhindern, so dass der Sicherheitsthread weiterlaufen kann?

Vielen Dank
BAMatze

sirius 6. Feb 2009 08:13

Re: Fragen zum TThread, Programm absturzsicher?
 
Ein kompletter Programmabsturz entsteht wenn im Hauptthread (dort, wo das Programm startet) eine Exception nicht mit try..Except abgefangen wird. Wird ein einem Kindthread eine Excepütion nicht abgefangen beendet das nur diesen Thread.

Ich glaube du solltest dir eher Gedanken über Exceptionbehandlung machen und dann über Threads nachdenken.

BAMatze 6. Feb 2009 08:40

Re: Fragen zum TThread, Programm absturzsicher?
 
Zitat:

Zitat von sirius
Ein kompletter Programmabsturz entsteht wenn im Hauptthread (dort, wo das Programm startet) eine Exception nicht mit try..Except abgefangen wird. Wird ein einem Kindthread eine Excepütion nicht abgefangen beendet das nur diesen Thread.

Ich glaube du solltest dir eher Gedanken über Exceptionbehandlung machen und dann über Threads nachdenken.

Also da ich hier ja eher "Learning by Doing" mache, bin ich für solche Hinweise sehr dankbar. Das mit Try..Except habe ich auch schon in dem Programm verwendet. Glaube ich erkläre mal etwas mehr. Also das Programm steuert eine Produktionsanlage. Das heißt es sind etliche Perepherie-Geräte dran und die Kamera, welche mir gegeben wurde, die Bilder im Micrometer-Bereich macht, kann nicht in Delphi programmiert werden, da die Eigenschaften der Komponenten in Delphi nicht konform mit den Definitionen für die Kamera gehen. Das Hauptproblem ist dabei die Live-Kameradarstellung auf dem Monitor. Deswegen verwende ich eine ActiveX-Komponente von der Firma, die die Kamera herstellt. Diese scheint nur etwas lieblos programmiert (Fehlermeldungen komme teilweise 2mal und seit Einbindung der Komponente kommt es vermehrt dazu, dass sich das Programm nicht vollständig schließen lässt -> Computer muss neu gestartet werden, damit das Programm wieder lauffähig wird) zu sein, was zu ständigen Querschlägern in dem Programm führt. Da ich derzeit nicht die Kenntnisse habe um die ActiveX-Komponente neu in einer anderen Sprache zu schreiben, die ich auch noch nicht kann, möchte ich das Problem erstmal (gewissen Zeitdruck hab ich ja auch, wegen Termin) auf die Weise lösen, dass ich den Thread in einem Nebenthread packe und somit die Daten sichern kann und darauf zielte die Frage an sich hin.

Danke dir für die schnelle Antwort @ sirius.

messie 6. Feb 2009 08:54

Re: Fragen zum TThread, Programm absturzsicher?
 
Ist bei der Kamera vielleicht eine dll dabei, mit der Du aus Delphi zugreifen kannst? Mit ActivX-Controls ist das so eine Sache...

Grüße, Messie

sirius 6. Feb 2009 08:58

Re: Fragen zum TThread, Programm absturzsicher?
 
Mir fällt dazu nicht viel ein. Wenn sogar der ganze Computer abstürzt. Da muss ja einiges falsch sein. Das sieht ja schon mehr nach Treiberproblemen aus.

Und sichtbare Controls sollte man immer im Hauptthread lassen, deswegen sehe ich keine Chance das ActiveX-Control in einen anderen Thread zu legen.

BAMatze 6. Feb 2009 09:11

Re: Fragen zum TThread, Programm absturzsicher?
 
Zitat:

Zitat von messie
Ist bei der Kamera vielleicht eine dll dabei, mit der Du aus Delphi zugreifen kannst? Mit ActivX-Controls ist das so eine Sache...

Grüße, Messie

Ja eine Dll ist dabei. Mit der konnte ich auch alles realisieren in Delphi, bis auf die Darstellung der Live-Video-Funktion, dafür fehlt den Delphi-Komponenten, so wie ich das in den Manuels gelesen hab die richtige Darstellungsmöglichkeit, die wohl in C++ und VB vorhanden sind, was ich aber nicht ganz verstehen kann, da ja auch die TForm die Eigenschaft Canvas meiner Meinung nach hat. Aber auch der Versuch das Live-Kamerabild in ein Bmp und dann TPaintbox oder Image zu packen sowie direkte Ausgabe auf ein Panel (Canvas) scheiterte. Die einzige Möglichkeit nach Beschreibung der Herstellerfirma für Delphi ist erstmal die Verwendung der ActiveX-Komponente.

@ sirius also der gesamte Rechner stürzt nicht ab, das hab ich in der Entwicklungszeit eigentlich gut unter Kontrolle bekommen, ist allerdings nachher, wenn ich (wegen Firmenblindheit für die eigene Arbeit) später nicht mehr selber dran sitze, nicht ausgeschlossen, dass es nochmal passiert. Aber was derzeit immer wieder passiert, sind Exceptions (trotz try und except) und damit verbundene Datenverluste. Dies möchte ich mit der Methode eigentlich minimieren. (Lasse derzeit schon mehrere Sicherungen mitlaufen z.B. erstellen einer Tempfile und protokollieren in dieser).

BAMatze

himitsu 6. Feb 2009 09:23

Re: Fragen zum TThread, Programm absturzsicher?
 
Wenn es in Delphi angeblich nicht geht, dann könntest du dir eventuell eine DLL in C oder VB erstellen, welche auf die Kamera zugreift und dein Delphi-Programm greift über diese DLL zu.

die Möglichkein die Kamera in einem extra Programm laufen zu lassen bestünde auch noch ... beide Programme könnten dann via Hier im Forum suchenIPC (Hier im Forum suchenMMF / Messages) miteinander kommunizieren.

BAMatze 6. Feb 2009 09:36

Re: Fragen zum TThread, Programm absturzsicher?
 
Zitat:

Zitat von himitsu
Wenn es in Delphi angeblich nicht geht, dann könntest du dir eventuell eine DLL in C oder VB erstellen, welche auf die Kamera zugreift und dein Delphi-Programm greift über diese DLL zu.

die Möglichkein die Kamera in einem extra Programm laufen zu lassen bestünde auch noch ... beide Programme könnten dann via Hier im Forum suchenIPC (Hier im Forum suchenMMF / Messages) miteinander kommunizieren.

Also ich will im Frühjahr/ Sommer das Programm nochmal überarbeiten. Das heißt gerade arbeite ich eh an einer Art Beta-Version, die aber einen terminierten Abgabetermin hat. Danach soll ich dies eh überarbeiten und da habe ich auch schon über solche Möglichkeiten nachgedacht, wobei die Variante eine eigene ActiveX-Komponente in C# zu schreiben derzeit die favourisierte ist, da ich einen Kollegen hab, der die Sprache gut kann, aber leider keine Zeit hat mir die Komponente zu erstellen. Das heißt einarbeiten in C# und dann kann ich nach Hilfe fragen, wenn ich mal ein Problem hab.

Was ich an deiner Lösung nicht verstanden hab ist, wie mein Problem mit einer DLL in C oder VB gelöst wird, vieleicht kannst du da noch etwas genauer werden. Denn das Problem, dass die Delphi-Komponenten anscheinend nicht die geeignete Schnittstelle haben, um das Live-Bild der Kamera darzustellen bleibt doch oder hab ich da jetzt einen Denk-Fehler?

BAMatze

sirius 6. Feb 2009 09:43

Re: Fragen zum TThread, Programm absturzsicher?
 
Warum sollte das Delphi nicht anzeigen können?

Sunlight7 6. Feb 2009 09:43

Re: Fragen zum TThread, Programm absturzsicher?
 
Zitat:

Zitat von sirius
Wird ein einem Kindthread eine Excepütion nicht abgefangen beendet das nur diesen Thread.

Sicher?
Zumindest in ältere Delphis stürtzt das Programm ab.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr.
Seite 1 von 3  1 23      

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