![]() |
DLL gewaltsam beenden
Leider kommt es mitunter vor das Thread(DLL) erstellt mit CreateThread nicht richtig beendet wird.
Nun gibt es ja die API TerminateThread() Aber ! Beendet diese API die DLL oder bleibt sie weiterhin im Speicher ?. Vielleicht hat jemand ein Sample zu demonstrations zwecken das ich mir mal anschauen kann. gruss Emil |
Re: DLL gewaltsam beenden
Mit TerminateThread wird -wie der Name schon sagt- nur der Thread terminiert. Die Dll bleibt im Speicher, kann aber mit FreeLibrary entladen werden.
|
Re: DLL gewaltsam beenden
Zitat:
Zumindest bleibt das Handle des Windows immer > 0 bedingt dadurch hänge ich in einer schleife aus der ich nicht mehr rauskomme. WM_DESTROY, WM_QUIT alles versucht tut sich nicht. gruss Emil |
Re: DLL gewaltsam beenden
Also eine Dll ist ja nur zusätzlicher Programmcode im Speicher. Der Macht ja nichts, ausser beim laden und ggf entladen etc. ein bisschen Code auszuführen.
Wenn du nun beim laden (zwischne begin und end.) einen Thread mit CreateThread erstellst und dieser in eine Endlosschleife hängt, dann kannst du den immernoch aus einem anderen Thread mit TerminateThread beenden. Die Dll ist aber weiterhin im Speicher. Was du machen könntest wäre a) eine neue Bedingung in die Schleife einfügen, dass die doch irgendwann aml beendet, oder aber TerminateThread benutzen, und wenn du die Dll entladen willst danach einfach FreeLibrary. Das sollte kein Problem sein. |
Re: DLL gewaltsam beenden
Zitat:
Schleife einfach beenden geht nicht solange das Handle <> 0 ist wird beim ausführen einer neuen DLL oder der gleichen unweigerlich ein AV auftreten. Da diese nicht zweimal ausgeführt werden kann, oder eine neue solange das handle nicht 0 ist. Dieses signalisiert mir das die DLL und das Window dieser terminiert wurde. Ich sende der Dll ein Quit worauf diese ihren Thread Terminieren sollte .. danach noch ein WM_DESTROY um sicher zustellen das kein Window mehr existiert. Wenn handle = 0 dann ist alles ok Danach wird die FreeLibrary aufgerufen und die DLL aus dem Speicher entfernt. Aber soweit komme ich gar nicht da der Return Code des handle nicht immer 0 ist. EDIT: Die DLL macht sehr viel es geht hier um Winamp VisPlugins Gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 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