AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Applikation hängt beim Beenden. Abschießen unmöglich
Thema durchsuchen
Ansicht
Themen-Optionen

Applikation hängt beim Beenden. Abschießen unmöglich

Ein Thema von alzaimar · begonnen am 19. Jan 2009 · letzter Beitrag vom 20. Jan 2009
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Applikation hängt beim Beenden. Abschießen unmöglich

  Alt 19. Jan 2009, 19:30
Ahoi

Der Titel sagt schon Alles.
Wir haben hier eine Applikation, die per DLL mit einer Steuerungsschnittstelle kommuniziert. Diese ist ziemlich tief im Windows-System verwoben, was sich durch den Umstand bemerkbar macht, das die Steuerungssoftware selbst dann weiterläuft, wenn Windows mit einem BSOD abschmiert oder sonst irgendwie abgeschmiert ist (was eigentlich nicht vorkommen darf, aber so stehts im Prospekt).

Nun denn, die Schnittstelle ist also eine DLL, die statisch von Delphi geladen wird (durch die 'external' Direktive). Desweiteren laufen diverse Threads in der Anwendung. Anwender berichten nun, das diese Anwendung ab und zu beim Beenden nicht aus dem Speicher verschwindet, sie ist in der Prozessliste noch zu sehen und lässt sich durch den Taskmanager *nicht* abschießen.

Ich dachte zuerst an einen nicht terminierenden Thread, aber dann kann man die App doch abschießen, oder?

Blöderweise funktioniert ein Teil der Applikation immer noch, sodaß die Steuerungssoftware denkt, die App läuft, obwohl sie in Wirklichkeit vollkommen breit im Speicher rumgeistert und keinen Ton von sich gibt.

Meine Frage:
Kann das Hängen und vor allen Dingen das nicht-abschießen-können damit zu tun haben, das die Anwendung gerade in der DLL ist, die widerum in den Tiefen von Windows rumrödelt? Lohnt es sich also, die DLL dynamisch zu laden und bei Programmende kontrolliert zu einem bestimmten Zeitpunkt X selbst freizugeben, um diesen undeterministischen Zustand zu vermeiden? Ich würde den Aufruf der DLL sogar über eine Critical Section kapseln oder irgendwie sicherstellen, das die DLL nur dann entladen wird, wenn gerade kein Zugriff darauf stattfindet.

Bringt das was?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Applikation hängt beim Beenden. Abschießen unmöglich

  Alt 19. Jan 2009, 20:27
das von dir beschriebene Verhalten kenne ich. Ich hatte es bisher nur beim direkten Ansteuern der seriellen Schnittstelle über einen Treiber der beim Start der Anwendung installiert wurde und über eine DLl angesprochen wird. Hängt das ganze dann im Treiber kehrt natürlich der DLL aufruf nicht zurück und abschießen geht auch nicht weil ja sonst der Treiber totalen Schwachsinn macht.
Daher ist die Treiberprogrammierung auch eine Kunst für sich weil es nicht möglich sein soll das eine Anwendung das System kontrollieren soll. Ziel bei Treibern sollte sein, dass der Treiber auch noch funktioniert wenn während der Kommunikation eine Schnittstelle abschmiert (sei es ein Gerät oder eine Application)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Applikation hängt beim Beenden. Abschießen unmöglich

  Alt 19. Jan 2009, 21:22
Gut, das dachte ich mir.

Ich würde also:
1. Vor jedem Zugriff auf die DLL ein Flag prüfen ( à la 'InShutdownMode')
2. Im OnClose dieses Flag auf True setzen.
3. Warten, bis kein Aufruf mehr in der DLL ist
4. Die DLL aus dem Speicher werfen (alle zukünftigen Aufrufe werden fehlschlagen)
5. Die Anwendung normal terminieren.

Wissen tut man natürlich nicht, ob das ganze dan funktioniert, da dieser Fehler einer dieser tollen 'passiert in Taiwan, aber sonst nur Dienstags, außer wenn es draußen regnet oder auch nicht, manchmal eben' Fehler ist.

Danke für die Bestätigung.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Applikation hängt beim Beenden. Abschießen unmöglich

  Alt 20. Jan 2009, 06:23
Hi,

so spontan würd ich jetzt sagen: DLL dynamisch laden. Dann beim Schliessen entladen und dabei warten, bis das auch geschehen ist (CloseQuery Event?). Hat ja nebenbei auch den Vorteil, daß man beim Start auf das Nichtvorhandensein der DLL vernünftig reagieren kann

Uli
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Applikation hängt beim Beenden. Abschießen unmöglich

  Alt 20. Jan 2009, 07:33
Das mit dem Entladen und warten schaue ich mir an. Das die DLL wider erwarten nicht auf dem Zielrechner ist, kann nicht passieren bzw. muss nicht explizit behandelt werden. Die DLL ist Bestandteil des Images, der im Produktionsprozess auf den Prozessrechner geblasen wird. Trotzdem ein guter Hinweis!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Applikation hängt beim Beenden. Abschießen unmöglich

  Alt 20. Jan 2009, 09:33
Du unterschätzt die Kreativität der Benutzer beträchtlich! Und wenn's nur der Virenscanner ist, der fälschlicherweise die DLL als Virus erkennt und in die Isolation schiebt.

Grüße,
Uli
  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 17:00 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