Pregunta Pasar múltiples argumentos a std :: hilo


Estoy preguntando al <thread> biblioteca en C ++ 11 estándar.

Digamos que tiene una función como:

void func1(int a, int b, ObjA c, ObjB d){
    //blahblah implementation
}

int main(int argc, char* argv[]){
    std::thread(func1, /*what do do here??*/);
}

¿Cómo pasa todos esos argumentos al hilo? Traté de enumerar los argumentos como:

std::thread(func1, a,b,c,d);

Pero se queja de que no existe tal constructor. Una forma de evitar esto es definir una estructura para empaquetar los argumentos, pero ¿hay alguna otra forma de hacerlo?


32
2017-12-03 00:46


origen


Respuestas:


Literalmente solo los pasas std::thread(func1,a,b,c,d); eso debería haberse compilado si los objetos existían, pero está mal por otra razón. Como no hay ningún objeto creado, no puede unir o separar el hilo y el programa no funcionará correctamente. Como es temporal, se llama inmediatamente al destructor, ya que el hilo no está unido o separado aún std::terminate se llama. Puede unir o separarlo antes de que se destruya la temperatura, como std::thread(func1,a,b,c,d).join();//or detach .

Asi es como debería de hacerse.

std::thread t(func1,a,b,c,d);
t.join();  

También puede separar el hilo, leer en los hilos si no conoce la diferencia entre unir y separar.


39
2017-12-03 00:54



Si está obteniendo esto, puede haber olvidado poner #include <thread> al comienzo de tu archivo. La firma de OP parece que debería funcionar.


0
2017-09-18 00:20