Sin impresión de cout en la función de inicio de pthread
Frecuentes
Visto 792 veces
0
Soy nuevo aquí y novato con la programación pthread. Mi problema está en una clase de C++, que estoy tratando de crear para encapsular un hilo. Leyendo, vi que cuando creo un pthread, necesito pasar una función C a pthread_create que se ejecuta en el inicio... Entonces, cuando el pthread ejecuta esa función, ¡no muestra el mensaje en la salida estándar!
Pero es mejor si ves el código: (obviamente es copiado y pegado de un tutorial de internet ^^)
void *runAtStart( void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
Thread::Thread() {
pthread_t threads[1];
int rc;
long t;
for(t=0; t<1; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, runAtStart, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
// exit(-1);
}
}
}
en lo principal llamo a esto como:
int main()
{
Thread *th=new Thread();
return 0;
}
la salida generada es:
In main: creating thread 0
Espero que alguien haya entendido! ¡Lo siento por mi ingles! :) Inzirio
1 Respuestas
0
Su programa funciona bien. El problema que está viendo es que su función main () regresa antes de que su hilo pueda ejecutarse, y esto hace que su programa se cierre.
Una manera simple de probar esto es agregar sleep(5);
in main()
, antes de su llamada de regreso. Una mejor manera es encontrar una manera de hacer que main() espere hasta que todos sus subprocesos se hayan completado antes de que regrese. Una forma razonable de hacerlo es agregar un destructor a su clase Thread que realice un pthread_join, y asegúrese de llamar al destructor: delete th;
respondido 10 mar '12, 15:03
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas pthreads cout or haz tu propia pregunta.