_endthreadex (0) hängt

stimmen
2

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?

Veröffentlicht am 09/12/2008 um 16:05
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
4

_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.

Beantwortet am 09/12/2008 um 16:14
quelle vom benutzer

stimmen
0

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

Beantwortet am 09/12/2008 um 16:18
quelle vom benutzer

stimmen
1

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.

Beantwortet am 09/12/2008 um 16:54
quelle vom benutzer

stimmen
9

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.

Beantwortet am 11/05/2012 um 21:10
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more