buenas... 
tengo otra duda mas q interesante
como bien me dijeron ahi incremente el tiempo del sleep en el while del main en 
q se valida q no se aborto y q no termino el thread del proceso
con sleep (1) funciona bien
al terminar el thread de procesamiento, el programa se cierra automaticamente y 
no hay ningun error
ahora bien, incremento el sleep(100) que me parece un tiempo muy razonable...
sin embargo
ahora al terminar el thread de procesamiento el programa no termina al instante 
como en el otro
se keda haciendo "algo" y a los 30 segundos se cierra solo (al ejecutarlo por 
consola)
hice el paso por paso... el thread de procesamiento efectivamente termina
el thread de consola se keda trabado en el getchar (xq no aborte)
quiero seguir con el paso a paso pero no hace nada 
(el programa no hace nada mas que esto q menciono: hilo para abortar y procesar)
volvi el sleep a 1 y funciona bien
alguna idea que puede ser?

  ----- Original Message ----- 
  From: John Knight 
  To: Una lista para consultas de programación 
  Sent: Monday, October 15, 2007 11:42 PM
  Subject: Re: [Prog] problema con pthread


  gracias de nuevo por la claridad :D
    ----- Original Message ----- 
    From: Leandro Fernández 
    To: Una lista para consultas de programación 
    Sent: Monday, October 15, 2007 9:43 PM
    Subject: Re: [Prog] problema con pthread


    Entiendo.

    En ese caso (ahora que el while tiene las dos condiciones) yo calcularía el 
tiempo más grande posible para el sleep() y lo usaría.

    Por ejemplo, podemos asumir que es suficiente con preguntar una vez por 
segundo a la consola si el usuario pidió salir. Por otra parte supongamos que 
la simulación tiene un ciclo por segundo. Entonces podríamos hacer que el while 
tenga un sleep de un segundo. 

    Mientras más grande el sleep() menos CPU consume el thread. Pero eso te da 
un retraso en la salida del programa de hasta el tiempo que pongas en el 
slee(). Si ponés diez segundos el usuario podría ver que el programa tarda 
hasta diez segundos después que él presionó la X y esto podría resultarle 
extraño. 
    Ponerle un sleep(1) o sleep(0) no te va a servir de nada para bajar el 
tiempo de consumo de CPU. Es mejor que no ponerlo, pero lo ideal es un tiempo 
generoso en función de las necesidades.


    On 10/15/07, John Knight <[EMAIL PROTECTED]> wrote: 
      si tenes razon
      pero en este caso estoy trabajando con muchos hilos, dos de los cuales son
         +)uno el de la consola para la X
         +)otro que hace un procesamiento
      el main deberia terminar cuando se aborta o cuando se termine el proceso, 
por eso necesito el while en el main
      el tema es que el getchar es bloqueante y si pongo eso en el main estoy 
frito

          thConsola.run();
          thSimulacion.run(); 
          while ((!thConsola.getCerrar()) && (!thSimulacion.getTerminado)) {
          }
          thConsola.stop(); 
          thSimulacion.stop(); 
          thConsola.join(); 
          thSimulacion.join(); 

      tengo otra duda
      recien probando esto, cuando finaliza el thread de procesamiento se 
cuelga con el abortar xq el getchar es bloqueante
      hasta ahora lo que tenia era en la clase Thread el stop que como dije 
antes es para avisar que deberia terminar "de forma elegante", o sea q  pare 
cuando pueda...
      pero en este caso, deberia agregar un metodo en Thread que sea kill() por 
ejemplo, no?
      pero el tema no se como hacer para parar el thread de forma abrupta... 
      estaria bien hacer esto?
      gracias Leandro por tus respuestas
      saludos
      PD: deberia tener un sleep(1) el while del main?
        ----- Original Message ----- 
        From: Leandro Fernández 
        To: Una lista para consultas de programación 
        Sent: Monday, October 15, 2007 6:20 PM
        Subject: Re: [Prog] problema con pthread


        No, simplemente no deberías usar ese while si lo único que vas a hacer 
ahí es esperar al otro thread. Nuevamente, vos decís que hay otros threads pero 
parece que el principal sólo espera a uno de los threads. El de consola. Eso no 
está bien. En todo caso si tenés threads trabajando y el principal no tiene 
nada que hacer, resolvé el tema de la consola en ese mismo thread. 

        En todo caso en lugar de un while deberías hacer join() del thread 
directamente. Dado que es ese thread el que determina el final de la 
aplicación. Pero eso no tiene ningún sentido. Se resuelve en un sólo thread.

        Tal vez sería bueno que diagrames los threads que tenés y qué función 
cumple cada uno. Luego te vas a dar cuenta que si un thread lanza a otro y se 
queda a esperar que ese termine, eso se simplifica a un sólo thread.

        Distinto sería lanzar N threads y esperar que todos terminen para salir 
de la aplicación.


        On 10/15/07, John Knight < [EMAIL PROTECTED]> wrote: 



          agregando una duda...
          cuando hago

              thConsola.run(); //LINEA 28 de client_main.cpp
              while (!thConsola.getCerrar()) {
              }

          deberia tener un sleep(1) adentrodel while para que no consuma tanta 
CPU?

          grax de nuevo por la info :D
          saludos




------------------------------------------------------------------------


        _______________________________________________
        Lista de correo Programacion.
        [email protected]
        http://listas.fi.uba.ar/mailman/listinfo/programacion




------------------------------------------------------------------------


        No virus found in this incoming message.
        Checked by AVG Free Edition. 
        Version: 7.5.488 / Virus Database: 269.14.12/1072 - Release Date: 
15/10/2007 05:55 p.m.




      _______________________________________________
      Lista de correo Programacion.
      [email protected] 
      http://listas.fi.uba.ar/mailman/listinfo/programacion





    -- 
    _Leo_
    (aka Lele) 


----------------------------------------------------------------------------


    _______________________________________________
    Lista de correo Programacion.
    [email protected]
    http://listas.fi.uba.ar/mailman/listinfo/programacion



----------------------------------------------------------------------------


    No virus found in this incoming message.
    Checked by AVG Free Edition. 
    Version: 7.5.488 / Virus Database: 269.14.12/1072 - Release Date: 
15/10/2007 05:55 p.m.



------------------------------------------------------------------------------


  _______________________________________________
  Lista de correo Programacion.
  [email protected]
  http://listas.fi.uba.ar/mailman/listinfo/programacion



------------------------------------------------------------------------------


  No virus found in this incoming message.
  Checked by AVG Free Edition. 
  Version: 7.5.488 / Virus Database: 269.14.12/1072 - Release Date: 15/10/2007 
05:55 p.m.
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a