![]() |
Anwendung beendet sich nicht (seit XE2)
Hallo,
seit ich XE2 benutze, beendet sich meine Anwendung (die aus mehreren Threads besteht) manchmal nicht. Die CPU-Last geht nach klicken auf das "Beenden-Kreuz" auf 100% für den aktiven CPU-Kern. Wenn ich in der Entwicklungsumgebung auf Pause drücke, dann erscheint folgender Assembler-Code:
Code:
WARUM nur RtlUserThreadStart --> ich habe das Programm doch beendet...:?::?::?: :?
ntdll.RtlUserThreadStart:
770701C4 89442404 mov [esp+$04],eax 770701C8 895C2408 mov [esp+$08],ebx 770701CC E9B99C0200 jmp $77099e8a 770701D1 8DA42400000000 lea esp,[esp+$0000] 770701D8 8DA42400000000 lea esp,[esp+$0000] 770701DF 90 nop ntdll.KiFastSystemCall: 770701E0 8BD4 mov edx,esp 770701E2 0F34 sysenter ntdll.KiFastSystemCallRet: 770701E4 C3 ret 770701E5 8DA42400000000 lea esp,[esp+$0000] 770701EC 8D642400 lea esp,[esp+$00] ntdll.KiIntSystemCall: 770701F0 8D542408 lea edx,[esp+$08] 770701F4 CD2E int $2e 770701F6 C3 ret 770701F7 90 nop 770701F8 0000 add [eax],al 770701FA 0000 add [eax],al 770701FC 1889E74C0000 sbb [ecx+$00004ce7],cl 77070202 0000 add [eax],al 77070204 50 push eax 77070205 51 push ecx 77070206 0100 add [eax],eax 77070208 0100 add [eax],eax 7707020A 0000 add [eax],al 7707020C F007 lock pop es 7707020E 0000 add [eax],al 77070210 E807000020 call $9707021c 77070215 0201 add al,[ecx] 77070217 00E0 add al,ah 77070219 2101 and [ecx],eax 7707021B 0080410100BC add [eax-$43fffebf],al 77070221 BB0A0058BC mov ebx,$bc58000a 77070226 0A00 or al,[eax] 77070228 81B70A0015B90A005DB7 xor [edi-$46eafff6],$b75d000a 77070232 0A00 or al,[eax] 77070234 51 push ecx 77070235 B50A mov ch,$0a 77070237 008DBB0A00BE add [ebp-$41fff545],cl 7707023D 7307 jnb $77070246 7707023F 00F1 add cl,dh 77070241 2102 and [edx],eax 77070243 005921 add [ecx+$21],bl 77070246 0200 add al,[eax] 77070248 F0260300 lock add eax,es:[eax] 7707024C E0D3 loopne $77070221 7707024E 07 pop es 7707024F 00F0 add al,dh 77070251 D307 rol [edi],cl 77070253 00D0 add al,dl 77070255 D307 rol [edi],cl 77070257 00B3260300B1 add [ebx-$4efffcda],dh 7707025D 260300 add eax,es:[eax] 77070260 7B26 jnp $77070288 77070262 0300 add eax,[eax] 77070264 D7 xlat 77070265 AC lodsb 77070266 06 push es 77070267 00848D0600A7AD add [ebp+ecx*4-$5258fffa],al 7707026E 06 push es 7707026F 0059D3 add [ecx-$2d],bl 77070272 0A00 or al,[eax] 77070274 D8CF fmul st(7) 77070276 0A00 or al,[eax] 77070278 F4 hlt 77070279 D00A ror [edx],1 7707027B 00C0 add al,al 7707027D D00A ror [edx],1 7707027F 009AA007002F add [edx+$2f0007a0],bl 77070285 A0070021CE mov al,[$ce210007] 7707028A 0A00 or al,[eax] 7707028C 1BD1 sbb edx,ecx 7707028E 0A00 or al,[eax] 77070290 66A007007DD3 mov al,[$d37d0007] 77070296 0A00 or al,[eax] 77070298 D4D2 aam $d2 Leider bin ich kein Freak auf dieser Ebene und hoffe, Ihr könnt mir einen Hinweis geben, wie ich dieses Problem lokalisieren kann. Das Problem tritt auch auf, wenn ich aus Delphi die Anwendung "ohne Debugger" starte. Dann bleibt nach Beenden des Programms der Prozess im Taskmanager stehen... Allerdings immer nur sporadisch. Manchmal tritt das Problem 10 Start/Ende-Zyklen nicht auf. Manchmal ist es ständig vorhanden. Ich würde mich freuen, wenn mir jemand einen Tip geben könnte. Beste Grüße, Poolspieler |
AW: Anwendung beendet sich nicht (seit XE2)
Solche Probleme treten auf, wenn eine Funktion verwendet wird, die einen Rückgabewert erwartet, wie z.B. SendMessage - in diesem Fall besser PostMessage verwenden.
|
AW: Anwendung beendet sich nicht (seit XE2)
Hallo hathor,
danke für Deine Antwort. Ich habe nach den beiden Begriffen gesucht. PostMessage habe ich nicht gefunden SendMessage gibt es schon. Es wird verwendet, um ein Richedit nach ganz unten zu scrollen:
Code:
Allerdings bin ich mir relativ sicher, dass diese Funktionen nicht während des Beendens des Programms aufgerufen werden.
SendMessage(protokoll_memo.Handle, WM_VSCROLL, SB_BOTTOM, 0); // nach ganz unten Scrollen
Ansonsten gibt es halt sehr viele Synchronize-Befehle, um die GUI mit den darunter liegenden Threads zu synchronisieren. Mir fällt halt auf, dass ich mit Delphi2009 diese Probleme nicht hatte. Erst seit dem ich auf XE2 umgestiegen bin, treten diese Verhaltensweisen auf...??? Naive Frage: Gibt es eine Möglichkeit, wenn ich auf "Pause" drücke --> über die Programmadressen auf den Verursacher zu kommen? Oder sollte ich vielleicht einen Profiler verwenden? Da ich hier eine Systemlast von 100% habe, müßte im Profiler ja die jeweilige Funktion/Prozedur stark vertreten sein - oder? Könnte vielleicht Dateizugriff die Ursache sein? Es werden schon auch einige Logfiles mitgeschrieben. Auch das Beenden des Programms wird mitgeschrieben... Gruß, Poolspieler |
AW: Anwendung beendet sich nicht (seit XE2)
Zitat:
|
AW: Anwendung beendet sich nicht (seit XE2)
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo jbg,
vielen Dank für Deine Antwort! Du hast Recht! Es werden noch 6 weitere Threads angezeigt, die aber alle den Status "Unbekannt" haben. Ich habe auch keine Möglichkeit gefunden, einen der Threads anzuhalten/zu pausieren oder ähnliches. Kannst Du mir vielleicht noch einen Tip geben, wie man das Problem einkreisen kann? :roll: Ich habe mal zwei Screenshots der Delphiumgebung angehängt... Parallel werde ich wohl eine (kostenpflichtige) Support-Anfrage bei embarcadero stellen... :cry: Grüße, Poolspieler |
AW: Anwendung beendet sich nicht (seit XE2)
Hallo zusammen,
ich habe (nach Telefonant mit Support) Delphi XE heruntergeladen und installiert. --> Ergebnis: Auch hier das selbe Verhalten. :evil: Kann sich irgend jemand vorstellen, an was das liegen kann bzw. wie man die Ursache aufspüren kann? :roll: Was ist an Delphi2009 anders? Warum tritt der Fehler da nicht auf???? Ich bin für jede Hilfe dankbar! Gruß, Poolpsieler :? |
AW: Anwendung beendet sich nicht (seit XE2)
Hab das gleiche Problem momentan auch. Ich programmiere ebenfalls an einer (Delphi XE) Anwendung, die mit mehreren Threads gleichzeitig arbeitet.
Der Fehler tritt leider nur sehr sporadisch auf, weswegen ich bisher keine reproduzierbaren Schritte finden konnte. Poolspieler, konntest du dein Problem damals beheben? Und wenn ja, wie? Sebastian |
AW: Anwendung beendet sich nicht (seit XE2)
Hallo Sebastian,
es lag damals an einer nicht freigegebenen TThreadlist. Ich habe dann ein Free- und Clear-Statement in den Destructor eingefügt. Dann war das Problem behoben. (klingt einfach, hat mich aber einige Wochen gekostet...) Viele Grüße, Poolspieler |
AW: Anwendung beendet sich nicht (seit XE2)
Hallo Poolspieler,
ich hab in meinem Fall zwar keine TThreadlist, werd aber nochmal drauf aufpassen, dass auch wirklich alle Threads freigegeben werden. Sitze auch schon seit geraumer Zeit an diesem Problem... Danke für die schnelle Antwort! Sebastian |
AW: Anwendung beendet sich nicht (seit XE2)
Ja, so verhält sich fast jedes meiner XE2-Programme: Da ist noch ein Thread am Laufen, der VCL-Thread ist aber schon aus. Du kannst die Threads auch benennen (
Delphi-Quellcode:
oder so) um die Übersicht zu behalten.
NameThreadForDebugging
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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 by Thomas Breitkreuz