Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/09/2013, 20:12
scrolling
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Respuesta: Recomiendacion entre proceso o hilo

Muchas gracias! Lo intenté con hilos y funcionó, pero con un detalle...

Los hilos se crean correctamente, pero como te comentaba, algunos hilos terminarán (siguiendo tu ejemplo, algunos llegarán a la parte de *param = true;) pero habrá otros que no, y que posiblemente nunca lleguen a esa parte (o sea, se quedarán "por siempre" en la línea de Funcion_Bloqueante();) lo que quisiera saber es cómo "matar" a esos hilos que se quedan en la Funcion_Bloqueante?

El problema es así (siguiendo tu ejemplo):

- Creo un hilo que ejecuta la Funcion_Bloqueante
- Mi hilo principal se encuentra en un ciclo while dando "vueltas" hasta que se cumplen 100ms
- Una vez que se cumplieron los 100ms, reviso la variable boleana "Terminado".
- Si "Terminado" es "verdadero", quiere decir que el hilo terminó correctamente (y quiero pensar que liberó sus recursos de manera correcta)
- Si "Terminado" es "falso", quiere decir que el hilo se sigue ejecutando.

Es en esta última parte donde tengo la confusión, ¿Cómo libero los recursos de ese hilo que se sigue ejecutando? Porque posiblemente se quedará por siempre en la linea de Funcion_Bloquente, o sea, que en código sería:

Código PHP:
    void Hilo(voidparam)
    {
       
boolTerminado = (bool*) param;
     
       
Funcion_Bloqueante();
     
       *
param true;
    }
     
    
void FuncionPadre()
    {
       
bool Terminado;

       for (
0250i++) { //Necesito repetir el proceso muchas veces e ir matando a los hilos que no lleguen a terminarse
            
Crear_Hilo(&Terminado); // Crear hilo, incluir el atributo detach en la implementación
       
            
while (1) {
           
// otras cosas
           //Cuenta hasta 100ml
        
}

         
//Pasaron los 100ms:

         
if (Terminadoputs("Hilo terminado");
            else if (!
Terminadoputs("No termino, aquí debería matarlo para crear uno nuevo en mi próximo ciclo y liberar sus recursos, cómo lo hago?")
       }

    } 
Me di cuenta que había un problema porque mi programa, aunque llega al final, se queda trabado, además, la máquina se empieza a quedar sin recursos, por ejemplo, ya no me deja abrir ningún programa argumentando que ya no hay memoria y me obliga a reiniciar la PC...

Muchas gracias!

Última edición por scrolling; 24/09/2013 a las 20:40