Ich habe einige Code, den ich ursprünglich nicht schaffen, dass verwendet _beginthreadex und _endthreadex. Aus irgendeinem Grund, wenn es nennt _endthreadex (0), nur der Ruf hängt und nie zurückgibt. Alle Ideen, was normalerweise dazu führen, diesen Aufruf zu hängen?
_endthreadex (0) hängt
quelle vom benutzer Adam Haile
In anderen Sprachen...















_endthreadex beendet den Faden, so dass es nicht zurückkehren kann. Das ist der ganze Sinn es zu nennen.
EDIT: Es ist ein bisschen ungewöhnlich zu nennen _endthreadex, in der Regel nur Sie die Thread-Startprozedur Rückkehr lassen und die Laufzeit ruft _endthreadex für Sie. Sie können ein bisschen mehr erklären müssen, was Sie versuchen zu tun, bevor wir helfen können.
Ok .... gut, endthreadex wird in der Deconstructor meiner Klasse über „löschen classinstance“ ... und der Deconstructor Anruf nie wieder ... so die ganze Sache hängt genannt
Rufen Sie versehentlich _endthreadex () zu versuchen , einen Faden von dem Haupt - Thread zu beenden?
Die Funktion _endthreadex () soll innerhalb des Thread aufgerufen werden , die Sie beenden möchten einen Rückgabewert zu melden, und für die richtige „Rückgewinnung von Ressourcen für den Thread zugewiesen.“ Sie sollten es nicht von der Haupt - Thread in einem Destruktor aufrufen müssen. Sie könnten in einem destructor, Signal an den Thread über ein Ereignis (siehe SetEvent , aus dem Haupt - Thread genannt) , dass der Faden sollte so bald wie möglich beenden, und dann der Faden, der als seine letzte Anweisung verläßt nennen würde _endthreadex () .
Der Aufruf _endthreadex () in Ihrem Haupt - Thread würde bewirken , dass der Prozess hängen, weil Sie Ihre Haupt - Thread beendet haben, aber Sie würden immer noch die Original - Thread haben Sie laufen beenden wollte noch.
Meine Antwort ist, zu weit zu spät, aber noch jemand sie verwenden.
In meinem Fall _endthreadex gehängt, wenn ich dll entladen und löschte einige globale Objekte. Eines der globalen Objekte hatte einen anderen Thread innerhalb und dieser Thread ausgeführt auch Fadenausgang. Dies verursachte Blockade seit DLLMain bereits crt Speicherkarte gesperrt. Lesen Sie DLLMain Hilfe und feststellen, dass Sie nicht tun eine andere Aktion auf einem anderen Threads oder Prozesse während DLLMain Aufruf erlaubt sind.