Qui vediamo come passare al costruttore dell'oggetto boost::thread l'indirizzo di una funzione e parametri per la funzione stessa.
L'esempio del post precedente usava un functor nella creazione del thread, ma é possibile ottenere lo stesso effetto con una funzione.
Nelle versioni di qualche anno fa di boost, si otteneva l'effetto con un binding tra puntatore alla funzione e parametro, nelle versioni più recenti basta, ancor più semplicemente, passare i parametri alla funzione dopo il puntatore nel costruttore del thread.
L'esempio qui sotto riporta la "vecchia" implementazione, commentata, e la nuova:
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/bind.hpp>
#include <iostream>
using namespace std;
namespace {
boost::mutex mio;
void count(int multi)
{
for (int i = 0; i < 10; ++i)
{
boost::mutex::scoped_lock lock(mio);
cout << boost::this_thread::get_id() << ": "
<< multi * i << endl;
}
}
}
void dd03()
{
// boost::thread t1(boost::bind(&count, 1));
// boost::thread t2(boost::bind(&count, 2));
boost::thread t1(&count, 1);
boost::thread t2(&count, -1);
t1.join();
t2.join();
}
Nessun commento:
Posta un commento