Qu'est-ce exactement join() dans Boost::thread? (C++)

En Java, je ferais quelque chose comme:

Thread t = new MyThread();
t.start();

Je commence thread par l'appel de méthode start (). Plus tard, je peux faire quelque chose comme:

for (int i = 0; i < limit; ++i)
{
    Thread t = new MyThread();
    t.start();
}

De créer un groupe de threads et d'exécuter le code dans la méthode run ().

Toutefois, en C++, il n'y a pas une telle chose comme la méthode start (). Utilisation de Boost, si je veux un thread pour commencer à courir, j'ai appeler la méthode join() afin de faire un thread en cours d'exécution.

#include <iostream>
#include <boost/thread.hpp>

class Worker
{
public:
    Worker() 
    {
        //the thread is not-a-thread until we call start()
    }

    void start(int N)
    {
        m_Thread = boost::thread(&Worker::processQueue, this, N);
    }

    void join()
    {
        m_Thread.join();
    }

    void processQueue(unsigned N)
    {
        float ms = N * 1e3;
        boost::posix_time::milliseconds workTime(ms);

        std::cout << "Worker: started, will work for "
                  << ms << "ms"
                  << std::endl;

        //We're busy, honest!
        boost::this_thread::sleep(workTime);
        std::cout << "Worker: completed" << std::endl;
    }

private:

    boost::thread m_Thread;
};

int main(int argc, char* argv[])
{
    std::cout << "main: startup" << std::endl;

    Worker worker, w2, w3, w5;

    worker.start(3);
    w2.start(3);
    w3.start(3);
    w5.start(3);

    worker.join();
    w2.join();
    w3.join();
    w5.join();
    for (int i = 0; i < 100; ++i)
    {
        Worker w;
        w.start(3);
        w.join();
    }
    //std::cout << "main: waiting for thread" << std::endl;    

    std::cout << "main: done" << std::endl;

    return 0;
}

Sur le code ci-dessus, la boucle for pour créer des threads 100, normalement je dois utiliser un boost::thread_group pour ajouter la fonction de thread, et enfin exécuter tous avec join_all(). Cependant, je ne sais pas comment le faire avec la fonction de thread mettre dans une classe qui utilise les différents membres de la classe.

D'autre part, la boucle ci-dessus ne se comportera pas comme la boucle en Java. Il fera de chaque thread à exécuter séquentiellement, pas tous à la fois comme les autres threads séparés, dont le propre join() est appelée.

Qu'est-ce que join() dans Boost exactement? Aussi s'il vous plaît m'aider à créer un groupe de threads qui partagent la même classe.

OriginalL'auteur Amumu | 2011-06-05