/* * Javier Abellán. 1 de Abril de 2003 * * Programa de ejemplo de threads. * * El programa principal crea un hilo y espera a que termine, recogiendo el * valor que este devuelva. * El hilo creado espera 1 segundo y termina devolviendo la cadena de * caracteres "Ya tá" */ #include /* Prototipo de la función que va a ejecutar el thread hijo */ void *funcionThread (void *parametro); /* * Principal * Lanza un thread para la función funcionThread. * Luego espera a que termine el thread y escribe en pantalla el valor que * este devuelve. */ main() { /* Identificador del thread hijo */ pthread_t idHilo; /* Atributos para la creación del thread */ pthread_attr_t atributos; /* error devuelto por la función de creación del thread */ int error; /* Valor que va a devolver el thread hijo */ char *valorDevuelto = NULL; /* Inicializamos los atributos con sus valores por defecto */ pthread_attr_init (&atributos); /* Aseguramos que el thread que vamos a poder esperar por el thread que * vamos a crear. */ pthread_attr_setdetachstate (&atributos, PTHREAD_CREATE_JOINABLE); /* Creamos el thread. * En idHilo nos devuelve un identificador para el nuevo thread, * Pasamos atributos del nuevo thread NULL para que los coja por defecto * Pasamos la función que se ejecutará en el nuevo hilo * Pasamos NULL como parámetro para esa función. */ error = pthread_create (&idHilo, &atributos, funcionThread, NULL); /* Comprobamos el error al arrancar el thread */ if (error != 0) { perror ("No puedo crear thread"); exit (-1); } /* El hilo principal espera al hilo hijo, indicándo por pantalla cuando * empieza la espera y cuando termina. */ printf ("Padre : Espero al thread\n"); pthread_join (idHilo, (void **)&valorDevuelto); printf ("Padre : Ya ha terminado el thread\n"); /* Se saca en pantalla el valor devuelto */ printf ("Padre : devuelve \"%s\"\n", valorDevuelto); } /* Funcion que se ejecuta en el thread hijo. * Espera un segundo y termina devolviendo la cadena de caracteres "Ya tá" */ void *funcionThread (void *parametro) { /* El hijo espera un segundo y sale, indicando cuando empieza a esperar y * cuando termina */ printf ("Hijo : Espero 1 segundo\n"); sleep (1); printf ("Hijo : Termino\n"); /* Termina el thread y devuelve una cadena "Ya tá" */ pthread_exit ((void *)"Ya tá"); }