![]() |
AW: Thread.Queue, Zeitmessung, Thread hängt angeblich
Zitat:
|
AW: Thread.Queue, Zeitmessung, Thread hängt angeblich
Zitat:
Wie würde dein Beispiel denn aussehen, wenn du es mit 2 verschiedenen Events ausstattest und das in meinen Thread implementierst, der ja bereits die MessageQueue pollt? Zitat:
|
AW: Thread.Queue, Zeitmessung, Thread hängt angeblich
Zitat:
Zitat:
Zum Profiling: - Anwendung mit mapfiles detailed bauen (am besten auch debug dcus Haken setzen) - ![]()
Delphi-Quellcode:
, was dem Profiler mitteilt, dass es ab hier losgehen soll, danach ggf dasselbe mit OFF. Dann ein Blick ins Ergebnis, was da auftaucht. Gut möglich, dass das nicht zielführend ist. Dann kann man noch mit VTune schießen.
OutputDebugString('SAMPLING ON')
Oder man geht ganz pragmatisch über den Sysinternal Process Explorer her und schaut sich den Callstack zum Zeitpunkt des Freezes an - nicht selten der Fall, dass ich bei sowas direkt ein WaitForSingleObject oder ähnliche Kandidaten finde. |
AW: Thread.Queue, Zeitmessung, Thread hängt angeblich
Zitat:
Delphi-Quellcode:
aufrufen, zu dem Zeitpunkt vor dem Hänger und
OutputDebugString('SAMPLING ON')
Delphi-Quellcode:
wenn der Hänger vorbei ist, richtig?
OutputDebugString('SAMPLING OFF')
Zitat:
|
AW: Thread.Queue, Zeitmessung, Thread hängt angeblich
Zitat:
Zitat:
|
AW: Thread.Queue, Zeitmessung, Thread hängt angeblich
Zitat:
habe mal nachgesehen... tatsächlich sind nur diese LLVM basiert DCCIOSARM DCCIOSARM64 DCCAARM DCCAARM64 DCCLINUX64 DCCOSX64 also ist Windows64 einfach nur ein sau langsamer compiler, ohne guten grund. Das hat mich wohl in die irre geführt. |
AW: Thread.Queue, Zeitmessung, Thread hängt angeblich
Liste der Anhänge anzeigen (Anzahl: 2)
@Stevie:
Moin, habe das mal untersucht und nachdem ich auf den Stop Button im Profiler geklickt hatte, kam nach ein paar Sekunden die Anzeige, dass das Programm keine Rückmeldung mehr hat. Im Taskmanager waren 0% CPU Auslastung unf 12MB Speicher belegt. Meine Anwendung lief währenddessen noch weiter. Diese habe ich dann manuell beendet und dann kam der Profiler auch wieder "zurück". 94% Local und Global Ratio mit 4828 Samples ist die win32u.dll mit dem Aufruf NtUserMsgWaitForMultipleObjectsEx. Ich denke mal, dass heißt, dort steht er am längsten drinne oder? Das ist eigentlich auch klar, da dieser Aufruf von meinen Threads überall so gemacht wird (mit der MessageQueue) und dann anschließend mit dem PeekMessage. Im Profiler die ersten Funktionen, die direkt mit meinem Quelltext zu tun haben, sind bei einem Ratio von 0.04% und <4 Samples. So richtig sagt mir das jetzt erstmal noch nichts Edit: Ich habe zu dem Thema Thread, Queue und Events ein separaten Beitrag aufgemacht, da es in diesem Beitrag eigentlich um die Analyse des VCL Hängers gehen soll |
AW: Thread.Queue, Zeitmessung, Thread hängt angeblich
So, neue Erkenntnisse:
Aufgrund des Profilers von Stevie, bin ich darauf aufmerksam geworden, dass ich den Hänger 2x nicht nachstellen konnte. Warum? Weil die Exe aus dem Profiler gestartet wurde und nicht aus der IDE. Nochmal den Test ohne Profiler gemacht und es ist tatsächlich so. Starte ich die Anwendung aus der Delphi IDE, kann ich den Fehler jedes Mal reproduzieren. Starte ich die Anwendung OHNE die Delphi IDE, ist es nicht mehr reproduzierbar. Mehrmals mit beiden Konstellationen versucht und immer das gleiche Ergebnis. Also hängt sich der Debugger da irgendwo rein und erzeugt den Hänger in irgendeiner Form... Na toll, muss man erstmal drauf kommen |
AW: Thread.Queue, Zeitmessung, Thread hängt angeblich
Hast Du schon mal den Application Verifier probiert?
|
AW: Thread.Queue, Zeitmessung, Thread hängt angeblich
Zitat:
Das kann auch umgekehrt auftreten, nämlich, dass es im Debugger nicht passiert. Das heißt allerdings nicht, dass das Debuggen direkt mit dem Fehler zu tun hat. Es bedeutet nur, dass es diesen leichter oder schwerer nachstellbar macht. Ein Punkt, der direkt die Delphi IDE betrifft: Diese setzt mit timeBeginPeriod..timeEndPeriod systemweit die Timer-Auflösung herunter, ich glaube auf 1. Dadurch verhalten sich insbesondere Aufrufe von Sleep anders. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 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