web-dev-qa-db-fra.com

Comment créer un tableau d'objets thread en C ++ 11?

Je veux apprendre à créer plusieurs threads avec la nouvelle bibliothèque standard C++ et à stocker leurs poignées dans un tableau.
Comment puis-je démarrer un fil?
Les exemples que j'ai vus démarrent un thread avec le constructeur, mais si j'utilise un tableau, je ne peux pas appeler le constructeur.

#include <iostream>
#include <thread>

void exec(int n){
    std::cout << "thread " << n << std::endl;
}

int main(int argc, char* argv[]){

    std::thread myThreads[4];

    for (int i=0; i<4; i++){
        //myThreads[i].start(exec, i); //?? create, start, run
        //new (&myThreads[i]) std::thread(exec, i); //I tried it and it seems to work, but it looks like a bad design or an anti-pattern.
    }
    for (int i=0; i<4; i++){
        myThreads[i].join();
    }

}
25
Squall

Rien d'extraordinaire requis; utilisez simplement l'affectation. Dans votre boucle, écrivez

myThreads[i] = std::thread(exec, i);

et ça devrait marcher.

58
Nevin