Discussion:
Matar hilos (winapi)
(demasiado antiguo para responder)
w***@gmail.com
2005-05-28 15:49:13 UTC
Permalink
Estoy realizando un programa que crea varios hilos para realizar
diversas tareas de forma concurrente. El programa tiene que permanecer
un tiempo concreto (50 segundos) en ejecución y transcurrido ese
tiempo, el proceso principal debe matar a los hijos y finalizar.
Es decir, el programa básicamente:
crea los hilos necesarios
duerme 50 segundos
mata a los hilos
termina
Hay una función de la api de win32, TerminateThread(handle) que acaba
con un proceso, pero da problemas al liberar la memoria, es demasiado
abrupto. Me pregunto,
¿Existe otra función aparte de esta que sirva para matar procesos
"suavemente"? (como mandar la señal SIGTERM en unix, más o menos)
También he pensado en que se podría mandar algún tipo de señal a
los hilos para que mueran. En unix eso se haría registrando una
manejadora, pero no sé cómo podría hacerlo en Windows...
En fín, espero que a pesar de ser un tema tan específico alguien
pueda ayudarme. Cualquier pista o ayuda será bien recibida.
Gracias a todos...
i***@kernel-labs.com
2005-05-30 13:17:00 UTC
Permalink
Post by w***@gmail.com
Estoy realizando un programa que crea varios hilos para realizar
diversas tareas de forma concurrente. El programa tiene que permanecer
un tiempo concreto (50 segundos) en ejecución y transcurrido ese
tiempo, el proceso principal debe matar a los hijos y finalizar.
crea los hilos necesarios
duerme 50 segundos
mata a los hilos
termina
Hay una función de la api de win32, TerminateThread(handle) que acaba
con un proceso, pero da problemas al liberar la memoria, es demasiado
abrupto. Me pregunto,
¿Existe otra función aparte de esta que sirva para matar procesos
"suavemente"? (como mandar la señal SIGTERM en unix, más o menos)
También he pensado en que se podría mandar algún tipo de señal a
los hilos para que mueran. En unix eso se haría registrando una
manejadora, pero no sé cómo podría hacerlo en Windows...
En fín, espero que a pesar de ser un tema tan específico alguien
pueda ayudarme. Cualquier pista o ayuda será bien recibida.
Gracias a todos...
La función en la que se inicia la ejecución de un nuevo thread recibe
un parámetro de tipo LPVOID. Podrías pasar a la función CreateThread
que crea el thread un puntero, por ejemplo, a un bool que se encuentre
a true mientas debe ejecutarse el thread en cuestión. Cuando valga
false simplemente abandonas la función donde se ejecute el thread
creado, liberando antes convenientemente todas los bloques de memoria
que hayas creado.

Eugenio Barahona
wastedyears
2005-05-30 22:07:53 UTC
Permalink
Si, al final he hecho algo muy parecido, gracias por la ayuda :)
Por cierto, tras haber hecho algunas investigaciones, he descubierto
que no es posible matar a un hilo desde otro conociendo su Id al estilo
Unix... es preciso incluir un mecanismo que los sincronice para que
mueran cuando se desee, lo más efectivo parece ser lo que comenta
Eugenio Barahona, aunque también puede implementarse con paso de
mensajes.
Ahí queda eso, a modo de feed-back :P Gracias de nuevo...

Loading...