O que exatamente é join () no Boost :: thread? (C ++)
Em Java, eu faria algo como:
Thread t = new MyThread();
t.start();
Inicio o thread chamando o método start (). Então mais tarde eu posso fazer algo como:
for (int i = 0; i < limit; ++i)
{
Thread t = new MyThread();
t.start();
}
Para criar um grupo de threads e executar o código no método run (
No entanto, em C ++, não existe o método start (). Usando o Boost, se eu quiser que um thread comece a ser executado, preciso chamar o método join () para fazer com que um thread seja executad
#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;
}
No código acima, o loop for para criar 100 threads, normalmente devo usar um boost :: thread_group para adicionar a função thread e, finalmente, executar tudo com join_all (). No entanto, não sei como fazê-lo com a função de thread inserida em uma classe que usa vários membros da class
Por outro lado, o loop acima não se comportará como o loop em Java. Isso fará com que cada thread seja executado seqüencialmente, nem todos de uma vez como os outros threads separados, cuja própria junção () é chamad
O que é join () exatamente no Boost? Também, por favor me ajude a criar um grupo de threads que compartilham a mesma class