AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL gewaltsam beenden

Ein Thema von EWeiss · begonnen am 3. Apr 2007 · letzter Beitrag vom 3. Apr 2007
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

DLL gewaltsam beenden

  Alt 3. Apr 2007, 18:25
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
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

Re: DLL gewaltsam beenden

  Alt 3. Apr 2007, 19:30
Mit TerminateThread wird -wie der Name schon sagt- nur der Thread terminiert. Die Dll bleibt im Speicher, kann aber mit FreeLibrary entladen werden.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: DLL gewaltsam beenden

  Alt 3. Apr 2007, 19:35
Zitat von brechi:
Mit TerminateThread wird -wie der Name schon sagt- nur der Thread terminiert. Die Dll bleibt im Speicher, kann aber mit FreeLibrary entladen werden.
Aus diesen grund möchte ich ja TerminateThread verwenden weil sie nicht entläd.
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
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#4

Re: DLL gewaltsam beenden

  Alt 3. Apr 2007, 20:19
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: DLL gewaltsam beenden

  Alt 3. Apr 2007, 20:29
Zitat von brechi:
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.
Danke erst mal für die Info.

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
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:22 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