_endthreadex (0) não reage

votos
2

Eu tenho algum código que eu não originalmente criar que usa _beginthreadex e _endthreadex. Por alguma razão, quando ele chama _endthreadex (0), a chamada só trava e nunca retorna. Todas as ideias sobre o que normalmente faria com que esta chamada para pendurar?

Publicado 09/12/2008 em 16:05
fonte usuário
Em outras línguas...                            


4 respostas

votos
9

A minha resposta é muito longe tarde, mas ainda alguém vai usá-lo.

No meu caso _endthreadex enforcado quando eu descarregar dll e excluídos alguns objetos globais. Um dos objetos globais teve outro segmento dentro e esse segmento também se apresentou saída de rosca. Isso causou impasse desde DLLMain mapa de memória CRT já está bloqueado. Leia DLLMain ajuda e descobrir que você não é permitido fazer qualquer outra ação em outro segmentos ou processos durante a chamada DLLMain.

Respondeu 11/05/2012 em 21:10
fonte usuário

votos
4

_endthreadex termina o fio, para que ele não pode voltar. Esse é o ponto de chamá-lo.

EDIT: É um pouco incomum para chamar _endthreadex, normalmente você acabou de deixar o procedimento de devolução início da linha e o tempo de execução chama _endthreadex para você. Pode ser necessário explicar um pouco mais, o que você está tentando fazer antes de podermos ajudar.

Respondeu 09/12/2008 em 16:14
fonte usuário

votos
1

Você está erroneamente chamando _endthreadex () para tentar acabar com um thread do thread principal?

A função _endthreadex () destina-se a ser chamado dentro do segmento que você deseja terminar a relatar um valor de retorno, e para o bom "recuperação dos recursos alocados para o segmento." Você não deve precisar de chamá-lo em um processo de destruição do thread principal. Você poderia, em um processo de destruição, o sinal para o segmento através de um evento (veja SetEvent , chamado a partir do thread principal) que o segmento deve sair o mais cedo possível, e, em seguida, o fio que está saindo como a sua última declaração chamaria _endthreadex () .

Chamando _endthreadex () em seu segmento principal faria com que o processo para pendurar, porque você terminou o seu segmento principal, mas você ainda teria o segmento original você queria terminar ainda em execução.

Respondeu 09/12/2008 em 16:54
fonte usuário

votos
0

Ok .... bem, endthreadex é chamado na deconstructor da minha classe através de "apagar classinstance" ... e essa chamada deconstructor nunca retorna ... então a coisa toda trava

Respondeu 09/12/2008 em 16:18
fonte usuário

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