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
Seite 2 von 2     12   
Alex_ITA01

Registriert seit: 22. Sep 2003
1.123 Beiträge
 
Delphi 12 Athens
 
#11

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 10. Sep 2013, 13:13
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
Miniaturansicht angehängter Grafiken
2013.09.10-13_08_05-001.jpg  
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#12

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 10. Sep 2013, 13:30
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.123 Beiträge
 
Delphi 12 Athens
 
#13

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 10. Sep 2013, 14:24
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
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
 
#14

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 10. Sep 2013, 14:44
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?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 10. Sep 2013, 14:59
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.123 Beiträge
 
Delphi 12 Athens
 
#16

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 11. Sep 2013, 10:21
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?
Let's fetz sprach der Frosch und sprang in den Mixer

Geändert von Alex_ITA01 (11. Sep 2013 um 10:24 Uhr) Grund: zusätzliche Frage
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 13. Sep 2013, 20:54
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.

Edit: Könnte dieser Fehler auch von einem nicht freigegebenen Formular entstehen?
Klar, insbesondere wenn du es mit TMonitor nutzt.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.123 Beiträge
 
Delphi 12 Athens
 
#18

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 16. Sep 2013, 08:15
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
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 16. Sep 2013, 12:23
Oh, Entschuldigung, das habe ich vergessen.

Setze in die genannte Zeile (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 test eax, eax , sprich in den bedingten Sprung jnz. Dann setze das Zero-Flag und du solltest aus der Schleife kommen.

donemonitorsupportcpu.png
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.123 Beiträge
 
Delphi 12 Athens
 
#20

AW: XE4 Probleme beim Beenden der Anwendung - DoneMonitorSupport

  Alt 17. Sep 2013, 13:21
Danke schön. Werde ich mal testen und dann das Ergebnis hier bekannt geben.

Gruß
Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:55 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