En el siguiente código creo un número de hilos, y cada uno de los hilos duerme durante algunos segundos.hacer que el programa principal espere a que terminen los hilos
Sin embargo, mi programa principal no espera a que terminen los subprocesos, supongo que los subprocesos continuarán ejecutándose hasta que terminen solos.
¿Hay alguna manera de hacer que los subprocesos continúen ejecutándose aunque termine el subproceso que realiza la llamada?
#include <pthread.h>
#include <iostream>
#include <cstdio>
#include <cstdlib>
int sample(int min,int max){
int r=rand();
return (r %max+min);
}
void *worker(void *p){
long i = (long) p;
int s = sample(1,10);
fprintf(stdout,"\tid:%ld will sleep: %d \n",i,s);
sleep(s);
fprintf(stdout,"\tid:%ld done sleeping \n",i,s);
}
pthread_t thread1;
int main(){
int nThreads = sample(1,10);
for(int i=0;i<nThreads;i++){
fprintf(stderr,"\t-> Creating: %d of %d\n",i,nThreads);
int iret1 = pthread_create(&thread1, NULL, worker, (void*) i);
pthread_detach(thread1);
}
// sleep(10);//work if this is not commented out.
return 0;
}
Gracias
Editar:
Lo siento por no aclarar, ¿es posible sin mantener explícitamente la cuenta de mis hilos de funcionamiento actuales y mediante el uso de unirse.
Si esto fuera una interfaz de usuario gráfica, sí, esto sería cierto porque hay una ciclo de mensajes. Debes tener una condición para continuar corriendo hasta que todos los hilos hayan terminado, como unirse. –