AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
Thema durchsuchen
Ansicht
Themen-Optionen

XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

Ein Thema von Alex_ITA01 · begonnen am 25. Jun 2013 · letzter Beitrag vom 17. Sep 2013
Antwort Antwort
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#1

XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 25. Jun 2013, 20:32
Hallo zusammen,
ich habe seit heute XE4 Pro und habe meine Anwendung von Delphi 2009 übernommen. Ein paar Anpassungen musste ich machen aber es lässt sich alles compilieren und ich habe auch keine Warnungen oder Fehler.

Unter Delphi 2009 konnte ich meine Anwendung ganz normal beenden (Threads freigeben, Objekte freigeben, Formulare freigeben usw.).
Unter XE4 habe ich das Problem, dass die Anwendung zwar runter fährt aber in der Delphi IDE wird mir oben in der Titelleiste immernoch angezeigt "wird ausgeführt" und wenn ich in die CPU Ansicht gehe und ich weiter debugge, sieht es nach einer Endlosschleife oder sowas aus, da er immer über die gleichen Aufrufe an die gleiche Stelle kommt.

Ich habe bereits meine Anwendung debuggt und mein Hauptfenster kommt ins FormDestroy und auch der letzte Thread wird freigegeben.
Habt ihr eine Idee, wie ich rausfinden kann, wer da am Ende hängen bleibt, sodass Delphi immernoch sagt "wird ausgeführt"? Unter Delphi 2009 ging das übrigens.

Nutze Win8, 64bit -> Anwendung als 32bit compiliert.

Gruß
Alex
Let's fetz sprach der Frosch und sprang in den Mixer

Geändert von Alex_ITA01 (26. Jun 2013 um 13:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.930 Beiträge
 
Delphi 12 Athens
 
#2

AW: XE4 Probleme beim Beenden der Anwendung

  Alt 25. Jun 2013, 21:17
Du kannst z.B. die finalization Abschnitte durchdebuggen indem du einen Haltepunkt auf das end. in deiner Projektdatei setzt. Dafür musst du ggf. Debug-DCUs aktivieren. Du wirst dann in Aufrufe aus FinalizeUnits gelangen, mit denen die einzelnen Units finalisiert werden. Irgendwo da bleibt das Programm dann hängen.

Beliebt ist bei Verwendung von Threads z.B. ein WaitFor beim Beenden nachdem die Anwendung schon herunterfährt. Dann wird nämlich kein CheckSynchronize aus OnIdle mehr aufgerufen und Synchronize-Aufrufe schlagen fehl. Da man gleichzeitig auf den Thread wartet, ist das ein typischer Deadlock. Das ist nur ein Beispiel, genauer musst du das selbst debuggen...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#3

AW: XE4 Probleme beim Beenden der Anwendung

  Alt 26. Jun 2013, 09:13
Habe ich probiert mit dem Debuggen nach dem .End
Da lande ich in der System.pas in der procedure _Halt0;

Da ist eine While True do Schleife drinne, die ich aber nicht genau verstehe.
In irgendwelche finalization Abschnitte komme ich leider gar nicht.
Es sind auch Fremdkomponenten (TMS) im Einsatz und ich weiß gar nicht, welche Unit denn überhaupt alles finalization Abschnitte nutzt...

Hast du noch eine Idee, was ich machen könnte bzw. wie ich über das CPU Fenster herausfinden kann, welcher Thread vielleicht hängt?

Ein WaitFor ist bei uns nicht im Einsatz.

Gruß
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: XE4 Probleme beim Beenden der Anwendung

  Alt 26. Jun 2013, 09:28
Zum Eingrenzen solch seltsamer Fehler kommentiere ich immer möglichst viele Dinge einfach aus. In deinem Fall würde ich versuchen die Threads mal komplett rauszunehmen.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#5

AW: XE4 Probleme beim Beenden der Anwendung -> DoneMonitorSupport

  Alt 26. Jun 2013, 10:20
Hab gefunden in welchen finalization Abschnitt er hängt.
System.SysUtils -> DoneMonitorSupport -> CleanEventList -> repeat until AtomicCmpExchange(EventCache[I].Lock, 1, 0) = 0;

Dort bleibt er ewig hängen.
Uwe Raabe hatte dazu hier schonmal was geschrieben:
http://stackoverflow.com/questions/1...upport-on-exit

Ich vermute TMS benutzt das Objekt TMonitor, da ich es definitiv nicht nutze.

Gibt es da eine Info, was man genau machen kann / sollte?

Werde TMS mal kontaktieren.

Die System.SysUtils.pas kann man ja leider nicht ändern und neu compilieren oder gibts da doch ein Weg dafür?

// Neu:
Ich habe das ganze jetzt mal mit 64bit probiert und siehe da, es geht.

Habe zwei Screenshots angefügt, wo man sieht, wie das Array "SyncEventCache" aussieht zwischen 32 und 64 bit.

Da sieht man auch, das es dann eben bei 64bit geht, weil da keine "1" in einem der Events steht.
Hoffe hier kann jemand helfen?!

Gruß
Alex
Angehängte Grafiken
Dateityp: png 32bit.png (60,0 KB, 26x aufgerufen)
Dateityp: png 64bit.png (62,3 KB, 21x aufgerufen)
Let's fetz sprach der Frosch und sprang in den Mixer

Geändert von Alex_ITA01 (26. Jun 2013 um 12:17 Uhr) Grund: Anhang hinzugefügt
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#6

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 9. Sep 2013, 20:44
Hallo zusammen,
ich muss das Thema nochmal auffrischen, weil es für mich hier immernoch keine Lösung gibt.
Einen entsprechenden QC habe ich gemacht aber ich kann und darf meine Anwendung leider nicht dort posten (diese würde wahrscheinlich auch den Rahmen des Supportes sprengen -> >700000 Zeilen, TMS gekauft und voll im Einsatz usw.).

Gibt es denn irgendeine Möglichkeit, entweder die vorhandene Funktion "DoneMonitorSupport" in der System.SysUtils.pas zu ändern oder das man diesen MonitorSupport abschaltet? Meine Anwendung funktionierte unter D2009 ja auch. Wenn ich wenigstens ein Hinweis darauf bekommen würde, welches Event dort nicht freigegeben ist, dann könnte ich ja auch danach suchen aber so...

Hoffe hier kann mir noch jemand weiter helfen.

Danke und Gruß
Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  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 10:56 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