_endthreadex (0) hangt

stemmen
2

Ik heb wat code die ik niet oorspronkelijk maken die gebruik maakt van _beginthreadex en _endthreadex. Om een ​​of andere reden, wanneer het roept _endthreadex (0), wordt de oproep gewoon hangt en nooit meer terug. Eventuele ideeën over wat normaal zou leiden tot deze oproep te hangen?

De vraag is gesteld op 09/12/2008 om 16:05
bron van user
In andere talen...                            


4 antwoorden

stemmen
4

_endthreadex eindigt de draad, zodat het niet kan terugkeren. Dat is het hele punt van noemen het.

EDIT: Het is een beetje ongewoon om te bellen _endthreadex, normaal gesproken laat je gewoon de draad start procedure rendement en de runtime roept _endthreadex voor u. Het kan nodig zijn om een ​​beetje meer uit te leggen, wat je probeert te doen voordat we kunnen helpen.

antwoordde op 09/12/2008 om 16:14
bron van user

stemmen
0

Ok .... goed, endthreadex wordt aangeroepen in de Deconstructor van mijn klas via "delete classinstance" ... en dat Deconstructor call nooit meer terug ... dus het hele ding hangt

antwoordde op 09/12/2008 om 16:18
bron van user

stemmen
1

Bent u per ongeluk belt _endthreadex () om te proberen een draad uit de rode draad te beëindigen?

De functie _endthreadex () is bedoeld om te worden genoemd in de thread die u wilt beëindigen om een terugkeer waarde te rapporteren, en voor de goede "herstel van de middelen voor de thread toegewezen." Je moet niet nodig om het te noemen in een destructor van de rode draad. Je zou, in een destructor, signaal om de draad door middel van een evenement (zie SetEvent , aangeroepen vanuit de rode draad) dat de draad zo snel mogelijk moeten verlaten en de draad die wordt verlaten als zijn laatste verklaring zouden noemen _endthreadex () .

Calling _endthreadex () in uw belangrijkste draad zou veroorzaken het proces op te hangen, omdat je je rode draad heeft beëindigd, maar zou u nog steeds de originele thread je wilde nog steeds te beëindigen draait.

antwoordde op 09/12/2008 om 16:54
bron van user

stemmen
9

Mijn antwoord is te ver laat, maar toch iemand zal gebruiken.

In mijn geval _endthreadex opgehangen toen ik lossen dll en verwijderde sommige globale objecten. Een van globale objecten hadden een andere thread binnen en dat draad presteerden thread exit. Dit veroorzaakte impasse sinds DllMain al opgesloten crt geheugen kaart. Lees DllMain hulp en vinden dat je niet mag doen enige andere actie op een andere draden of processen tijdens DllMain gesprek.

antwoordde op 11/05/2012 om 21:10
bron van user

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