16 Şubat 2018 Cuma

thread thread_group Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/thread.hpp>
Constructor
Şöyle yaparız.
boost::thread_group tg;
add_thread metodu
Şöyle yaparız.
tg.add_thread(new boost::thread(boost::bind(&foo::init, foo)));
create_thread metodu
Açıklaması şöyle.
Create a new boost::thread object as-if by new thread(threadfunc) and add it to the group.
Örnek
Şöyle yaparız.
tg.create_thread(boost::bind (..., ...));
Örnek
asio ile kullanmak için şöyle yaparız.
boost::asio::io_service ios;

//Create thread-pool now
size_t numThreads = boost::thread::hardware_concurrency();
for(size_t t = 0; t < numThreads; t++) {
  tg.create_thread (boost::bind(&boost::asio::io_service::run, &ios));
}
join_all metodu
Şöyle yaparız.
tg.join_all();
asio ile kolayca kullanmak
Şöyle yaparız.
struct Processing {
  Processing() {
    for (unsigned i=0; i < boost::thread::hardware_concurrency(); ++i)
      threads.create_thread([this] { ios.run(); });
  }

  ~Processing() {
    work.reset();
    threads.join_all();
  }

  void submit(std::string const& name, model::cluster const& cluster) {
    ios.post([=] { do_processing(name, cluster); });
  }

private:
  void do_processing(std::string const& name, model::cluster const& cluster) {
    boost::this_thread::sleep_for(boost::chrono::milliseconds(950));
  }

  ba::io_service ios;
  boost::optional<ba::io_service::work> _work = ba::io_service::work(ios);
  boost::thread_group threads;
};
Diğer
thread_group sınıfı dışında boost'a dahil olmayan ancak aynı isim alanını kullanana bir proje daha var.

Örnek
Şöyle yaparız.
#include <boost/thread.hpp>
#include <boost/threadpool.hpp>

boost::threadpool::pool GAPopulation::thpool(5);

for(int i = 0; i < p.size(); i++) {
  thpool.schedule(boost::bind( ..., ...));
}

thpool.wait();

Hiç yorum yok:

Yorum Gönder