>
>
> 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?
>
Sip.
grax de nuevo por la info :D
> saludos
>
>
> ----- Original Message -----
> *From:* Leandro Fernández <[EMAIL PROTECTED]>
> *To:* Una lista para consultas de programación<[email protected]>
> *Sent:* Monday, October 15, 2007 10:59 AM
> *Subject:* Re: [Prog] problema con pthread
>
> No me queda del todo claro si tu problema es sólo la memoria no liberada.
>
> Sí es así te cuento que es muy común eso, y que en todo caso tenés que
> asegurarte de llamar a JOIN para todos los threads iniciados por tu
> aplicación. Si aún así pierde memoria dentro del pthread_create() no te
> preocupes. De todas formas observá que te dice que el bloque es perdido
> "posiblemente". Esto quiere decir que al finalizar el programa la memoria no
> se había liberado pero existían punteros a ese espacio de memoria.
> No es bueno que tu programa haga algo así. Pero si esto se debe a una
> biblioteca (pthread por ejemplo) que estás usando correctamente. no podés
> hacer nada al respecto.
>
> Con respecto al código que escribiste tené en cuenta:
>
> 1. Un código como:
>
> thConsola.run(); //LINEA 28 de client_main.cpp
> while (!thConsola.getCerrar()) {
> }
> thConsola.stop();
> thConsola.join();
>
> No tiene sentido alguno. Ya que el thread origen no hace nada y consume
> 100% de CPU en el while. Luego bloquea en join(). Si esto lo escribiste sólo
> para probar no hay problema.
> Pero nunca está bien que un thread lance otro y luego espere que ese
> finalice. Para eso no se necesitan dos threads.
>
> 2. Es interesante ver que la clase Consola no terminaría su thread nunca a
> pesar de que llames al stop() si el usuario no presiona una tecla.
>
> 3. El método stop() de Thread no está llamando a la función STOP de
> pthread. Si eso es verdadero está bien que lo uses como indicador de que el
> thread debe morir. De otra forma está mal.
>
> 4. En todo caso sería más claro si el stop() llama al stop de pthread y
> dejás que la forma de indicar la finalización del thread esté a cargo de la
> clase derivada de Thread. Esto sería mucho mejor ya que hasta ese momento no
> sabés que implica un pedido de finalización del thread. No sabés qué es lo
> que hace ese thread.
>
> Saludos...
>
> On 10/15/07, John Knight <[EMAIL PROTECTED]> wrote:
> >
> > buenas de nuevo...
> > toy teniendo un problema con una aplicacion q usa pthread
> > tengo una aplicacion con muchos hilos, con un hilo que se ocupa solo de
> > fijarse si el usuario teclea una X para abortar el programa
> > (estoy encapsulando pthread en una clase Thread)
> > el codigo que ejecuta el hilo ThreadConsola seria el siguiente:
> >
> > while (!_mustStop) {
> > if (toupper(getchar()) == 'X') {
> > _mustStop = true;
> > _cerrar = true;
> > std::cout << "Cerrar xq toco X" << std::endl;
> > }
> > }
> >
> > _mustStop es una variablede la clase Thread que solo encapsula pthread,
> > usada para poder realizar un stop() desde afuera
> > _cerrar es atributo de ThreadConsola para marcar si se aborto el
> > programa
> >
> >
> > desde el main hago lo siguiente:
> >
> > ThreadConsola thConsola;
> > if (thConsola) {
> > thConsola.run(); //LINEA 28 de client_main.cpp
> > while (!thConsola.getCerrar()) {
> > }
> > thConsola.stop();
> > thConsola.join();
> >
> > el run() llama el pthread_create
> > el join() llama pthread_join
> >
> > cuando lo corro con valgrind el programa termina pero me tira el
> > siguiente error
> > 72 bytes in 1 blocks are possibly lost in loss record 2 of 2
> > ==30428== at 0x401C6CA: calloc (vg_replace_malloc.c:279)
> > ==30428== by 0x400E188: (within /lib/ld-2.3.6.so)
> > ==30428== by 0x400E24B: _dl_allocate_tls (in /lib/ld-2.3.6.so)
> > ==30428== by 0x414881F: pthread_create@@GLIBC_2.1 (in
> > /lib/tls/i686/cmov/libpthread-2.3.6.so)
> > ==30428== by 0x804ABC2: Thread::run() (common_thread.cpp:23)
> > ==30428== by 0x8049293: ImprimirSimulacion(std::string const&,
> > unsigned short const&) (client_main.cpp:28)
> > ==30428== by 0x80494B0: main (client_main.cpp:49)
> >
> > o sea, se queja de q no libero memoria al hacer el pthread_create()
> > dentro de thConsola.run();
> >
> > la verdad q recien empiezo con el tema threads, por lo q no la tengo
> > clara...
> > no se si estoy haciendo las cosas bien
> > lo que me trae dudas es que hace el join en este caso, xq el getchar es
> > "blockeante"
> > espero q el codigo sea suficiente para saber el origen del problema
> > gracias adelantadas
> > saludos
> >
> > _______________________________________________
> > 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.11/1071 - Release Date:
> 15/10/2007 06:48 a.m.
>
>
> _______________________________________________
> Lista de correo Programacion.
> [email protected]
> http://listas.fi.uba.ar/mailman/listinfo/programacion
>
>
--
Dario Griffo
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion