_endthreadex (0) se cuelga

votos
2

Tengo un código que no creé originalmente que use _beginthreadex y _endthreadex. Por alguna razón, cuando llama a _endthreadex (0), la llamada simplemente se cuelga y nunca regresa. ¿Alguna idea sobre lo que normalmente haría que cuelgue esta llamada?

Publicado el 09/12/2008 a las 16:05
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
9

Mi respuesta es demasiado tarde, pero aún alguien va a usar.

En mi caso _endthreadex colgado cuando descargo DLL y eliminado algunos objetos globales. Uno de los objetos globales tenían otro hilo de rosca interior y que también se realizó salida de rosca. Esto causó estancamiento desde DLLMain mapa de memoria CRT que ya está bloqueado. Leer DLLMain ayuda y encontrar que no se le permite hacer cualquier otra acción sobre otros hilos o procesos durante la llamada DLLMain.

Respondida el 11/05/2012 a las 21:10
fuente por usuario

votos
4

_endthreadex termina el hilo, por lo que no puede regresar. Ese es el punto de llamarlo.

EDITAR: Es un poco raro llamar a _endthreadex, normalmente solo dejas que el procedimiento de inicio de subproceso vuelva y el tiempo de ejecución llama a _endthreadex por ti. Es posible que necesite explicar un poco más, lo que está tratando de hacer antes de que podamos ayudarlo.

Respondida el 09/12/2008 a las 16:14
fuente por usuario

votos
1

¿Estás llamando erróneamente a _endthreadex () para intentar finalizar un hilo del hilo principal?

La función _endthreadex () debe invocarse dentro del hilo que desea terminar para informar un valor de retorno y para la "recuperación de recursos asignados para el hilo". No debería necesitar llamarlo en un destructor desde el hilo principal. Podrías, en un destructor, señalizar al hilo a través de un evento (ver SetEvent , llamado desde el hilo principal) que el hilo debería salir lo antes posible, y luego el hilo que está saliendo como su última instrucción llamaría a _endthreadex () .

Llamar a _endthreadex () en el hilo principal provocaría que el proceso se cuelgue, porque ha finalizado el hilo principal, pero aún tendría el hilo original que deseaba finalizar ejecutándose.

Respondida el 09/12/2008 a las 16:54
fuente por usuario

votos
0

Ok ... bueno, endthreadex se llama en el deconstructor de mi clase a través de "delete classinstance" ... y esa llamada deconstructor nunca regresa ... así que todo se cuelga

Respondida el 09/12/2008 a las 16:18
fuente por usuario

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