3 Nisan 2018 Salı

fibers

Giriş
Şu satırı dahil ederiz.
#include <boost/fiber/all.hpp>
Bu kütüphaneyi kullanmak için context kütüphanesi de gerekir. Açıklaması şöyle
boost_fiber depends upon boost_context. So you'll need -lboost_fiber -lboost_context at the end of the command line.
barrier Sınıfı
Constructor
Şöyle yaparız
boost::fibers::barrier barrier(4);
wait metodu
Şöyle yaparız
barrier.wait();
channel Sınıfı
Constructor
Önce bir typedef yaparız.
typedef boost::fibers::buffered_channel<T> channel_t;
Şöyle yaparız.
size_t n = ...;
channel_t chan(n);
pop metodu
Şöyle yaparız.
int a = 0;
channel.pop (a);
push metodu
Şöyle yaparız.
int a = 1000;
chan.push (a);
fiber Sınıfı
Constructor - global method
Şöyle yaparız.
void helloFiber() {
  ...
}
boost::fibers::fiber f (helloFiber);
Constructor - method + parametre
Örnek
future geçmek için söyle yaparız.
void helloFiber(boost::fibers::future<void> &f) {
  f.get ();
}


boost::fibers::future<void> ft = ...;
boost::fibers::fiber f (helloFiber, std::move (ft));
Örnek
barrier geçmek için şöyle yaparız.
boost::fibers::barrier barrier(2);
boost::fibers::fiber f ([](boost::fibers::barrier& barrier) {
  ...
}, std::ref(barrier) );
Örnek
Şöyle yaparız.
inline void doDatabaseCall( Document &msg ) {
  ...
}

Document msg;
...
boost::fibers::fiber f (doDatabaseCall, msg);
detach metodu
Şöyle yaparız.
f.detach ();
join metodu
Şöyle yaparız.
f.join();
future Sınıfı
Constructor
Şöyle yaparız.
boost::fibers::promise<void> pm;
boost::fibers::future<void> ft = pm.get_future ();
get metodu
Şöyle yaparız.
f.get ();
promise Sınıfı
Constructor
Şöyle yaparız.
boost::fibers::promise<void> pm;
get_future metodu
Şöyle yaparız.
boost::fibers::future<void> ft = pm.get_future ();
set_value metodu
Şöyle yaparız.
pm.set_value ();
this_fiber Sınıfı
get metodu
Şöyle yaparız
std::cout << "main fiber: " << boost::this_fiber::get_id() << std::endl;
Free Style Metodlar
Şöyle yaparız
boost::fibers::use_scheduling_algorithm< boost::fibers::algo::work_stealing >(4); 


Hiç yorum yok:

Yorum Gönder