Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport (https://www.delphipraxis.net/175493-xe4-probleme-beim-beenden-der-anwendung-donemonitorsupport.html)

Alex_ITA01 10. Sep 2013 12:13

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt mal D2009 mit XE4 verglichen.
Das DoneMonitorSupport gibt es nämlich unter D2009 auch schon nur werden standardmäßig keine Events eingetragen (TMonitor.Enter -> TMonitor.GetEvent -> MonitorSupport.NewSyncObject).

Anbei mal ein Screenshot wo man den Unterschied im TThread deutlich sieht.
Das hat sich nämlich geändert zwischen den beiden Delphi Versionen.

(System.)Classes.pas

XE4: class procedure TThread.Synchronize(ASyncRec: PSynchronizeRecord; QueueEvent: Boolean = False);

Dort wird mit TMonitor.Enter/Exit gearbeitet

D2009: class procedure TThread.Synchronize(ASyncRec: PSynchronizeRecord; QueueEvent: Boolean = False);

Hier wird mit EnterCriticalSection(ThreadLock) und LeaveCriticalSection(ThreadLock) gearbeitet.

Schön wäre es jetzt natürlich, dass gleiche Verhalten wie unter D2009 wieder zu erzeugen.

Gruß
Alex

Uwe Raabe 10. Sep 2013 12:30

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
 
Zitat:

Zitat von Alex_ITA01 (Beitrag 1227824)
Schön wäre es jetzt natürlich, dass gleiche Verhalten wie unter D2009 wieder zu erzeugen.

Ich würde eher versuchen, die Instanzen zu finden, die unter bestimmten Bedingungen offenbar nicht freigegeben werden. Dann hast du das Problem beim nächsten Update nämlich auch nicht mehr. Grundsätzlich funktioniert DoneMonitorSupport ja, wenn wirklich alle Objekte, die TMonitor verwenden auch wieder freigegeben werden. Auch wenn du das jetzt irgendwie hin flickst, so daß der Hänger nicht auftritt, bleibt doch ein unangenehmer Beigeschmack - würde es zumindest bei mir.

Alex_ITA01 10. Sep 2013 13:24

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
 
Klar, ich will es eigentlich auch richtig gelöst haben und nicht irgendwie gefuscht.
Das Problem ist ja, dass ich nicht genau weiß, wer alles TMonitor verwendet (scheinen ja in der neuen Delphi Version jede Menge Controls/Objecte zu sein) und wie ich vielleicht anhand der EventAdresse auf das Object schlussfolgern könnte.

Gruß
Alex

baumina 10. Sep 2013 13:44

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
 
Als ich mit Threads angefangen habe, hatte ich die dollsten sporadischen Zugriffsverletzungen und sonstigen Mist. Deswegen tippe ich weiterhin darauf, dass dieses Verhalten von einem Thread ausgelöst wird. Gibt es für dich nicht die Möglichkeit diese Threads mal alle auszukommentieren, um zu schauen ob das Problem bleibt?

jaenicke 10. Sep 2013 13:59

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
 
Ich habe das sehr einfach gelöst...
FastMM4 im FullDebugMode, Haltepunkt auf die genannte Schleife, per Assemblerfenster manuell aus der Schleife in DoneMonitorSupport raus und dann alle Speicherlecks geprüft, die FastMM4 gefunden hat. ;-)

Alex_ITA01 11. Sep 2013 09:21

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
 
Alle Threads ausklammern wäre sicherlich recht aufwendig wenn überhaupt machbar. Muss ich mal im Hinterkopf behalten.

@jaenicke: Ich kann dir nur teilweise folgen. FastMM4 ist klar mit FullDebugMode, dann den Breakpoint auf die repeat until Schleife ist mir auch noch klar aber was meinst du mit "per Assemblerfenster manuell aus der Schleife und dann Speicherlecks prüfen"? Was du mit Assembler Fenster meinst weiß ich auch noch aber wie kommt ich "manuell" aus der Schleife um dann die Speicherlecks zu sehen?

Gruß
Alex

Edit: Könnte dieser Fehler auch von einem nicht freigegebenen Formular entstehen?

jaenicke 13. Sep 2013 19:54

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
 
Zitat:

Zitat von Alex_ITA01 (Beitrag 1227913)
Was du mit Assembler Fenster meinst weiß ich auch noch aber wie kommt ich "manuell" aus der Schleife um dann die Speicherlecks zu sehen?

Ich glaube da muss ich weiter ausholen, wenn ich die Frage lese. ;-)
Dazu habe ich gerade nicht genug Zeit, ich schreibe nachher etwas dazu.

Grundsätzlich musst du nur nach der Prüfung vor dem Sprungbefehl das Ergebnis manipulieren, damit du aus der Schleife kommst.

Zitat:

Zitat von Alex_ITA01 (Beitrag 1227913)
Edit: Könnte dieser Fehler auch von einem nicht freigegebenen Formular entstehen?

Klar, insbesondere wenn du es mit TMonitor nutzt.

Alex_ITA01 16. Sep 2013 07:15

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
 
Hallo zusammen,

Zitat:

Zitat von Alex_ITA01:
Edit: Könnte dieser Fehler auch von einem nicht freigegebenen Formular entstehen?

Klar, insbesondere wenn du es mit TMonitor nutzt.
Ich selber nutze TMonitor definitiv nicht. Wenn dann ist das durch irgendwelche Änderungen im Hintergrund vom Delphi Standard reingekommen. Weiß denn jemand, ob TForm irgendwo neuerdings TMonitor benutzt?

@jaenicke:
Ich bin mal gespannt auf deine "Anleitung" mit dem Assemblerfenster ;-)

Gruß
Alex

jaenicke 16. Sep 2013 11:23

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
 
Liste der Anhänge anzeigen (Anzahl: 1)
Oh, Entschuldigung, das habe ich vergessen.

Setze in die genannte Zeile (
Delphi-Quellcode:
repeat until AtomicCmpExchange(EventCache[I].Lock, 1, 0) = 0;
) einen Haltepunkt. Kommst du da an, öffne das CPU-Fenster (Strg + Alt + C), gehe weiter bis nach der Zeile
Delphi-Quellcode:
test eax, eax
, sprich in den bedingten Sprung jnz. Dann setze das Zero-Flag und du solltest aus der Schleife kommen.

Anhang 39873

Alex_ITA01 17. Sep 2013 12:21

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport
 
Danke schön. Werde ich mal testen und dann das Ergebnis hier bekannt geben.

Gruß
Alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr.
Seite 2 von 2     12   

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