2012-03-27 11 views
22

C'è qualcosa come boost::thread_group in C++ 11?boost :: thread_group in C++ 11?

Sto solo cercando di trasferire il mio programma dall'utilizzo di thread da boost:thread a C++ 11 e non è stato in grado di trovare nulla di equivalente.

+4

fili Boost e C++ 11 fili sono diversi. Personalmente continuo a utilizzare i thread di boost a causa dell'API più completa (e della mancanza di implementazione corrente, ad esempio di archiviazione locale dei thread). –

risposta

24

No, non c'è niente direttamente equivalente a boost::thread_group in C++ 11. Potresti usare un std::vector<std::thread> se tutto ciò che vuoi è un contenitore. È quindi possibile utilizzare la nuova sintassi for o std::for_each per chiamare join() su ciascun elemento o altro.

+4

Dal 2012 c'è stata una soluzione migliore a questo problema? – pyCthon

+1

Vorrei aggiungere che non c'è davvero alcuna magia in "boost :: thread_group", è un po 'più di un vettore di thread (il "poco più" sono alcune funzioni di utilità come 'join_all' e' create_thread'). –

5

thread_group non sono stati convertiti in standard C++ 11 e C++ 14.

Ma una soluzione è semplice:

std::vector<std::thread> grp; 

    // to create threads 
    grp.emplace_back(functor); // pass in the argument of std::thread() 

    void join_all() { 
    for (auto& thread : grp) 
     if (thread.joinable()) 
     thread.join(); 
    } 
Problemi correlati