Giriş
Şu satırı dahil ederiz.
Şu satırı dahil ederiz.
#include <boost/thread.hpp>
Ya da şu satırı dahil ederiz.
#include <boost/thread/thread.hpp>
Bu sınıf Windows'ta C kütüphanesinin _beginthreadex metodunu kullanır. Metod şöyledir.
bool thread::start_thread_noexcept()
{
uintptr_t const new_thread = _beginthreadex(
0,
0,
&thread_start_function,
thread_info.get(),
CREATE_SUSPENDED,
&thread_info->id);
if (!new_thread)
{
return false;
}
// why call this line?
intrusive_ptr_add_ref(thread_info.get());
thread_info->thread_handle = (detail::win32::handle)(new_thread);
ResumeThread(thread_info->thread_handle);
return true;
}
Constructor - Callable global function
Örnek
Şöyle yaparız.
void f1()
{...}
boost::thread t (&f1);
Örnek
Şöyle yaparız.vector<int> first;
vector<string> second;
unique_ptr<boost::thread> thr =
make_unique<boost::thread>(testfunc, boost::ref(first), boost::ref(second)));
Constructor - Callable member function
Şöyle yaparız.
İmzası şöyle. Variadic template kullanır.
boost::thread t(&myClass::myFun, this);
Constructor - Callable + attributesİmzası şöyle. Variadic template kullanır.
template <class F,class A1,class A2,...>
thread(F f,A1 a1,A2 a2,...);
Şöyle yaparız. thread sınıfının 3 parametreli constructor metodu yok. Callable nesnesine parametre geçmek için boost::bind kullandık.void WorkerThread (int i)
{...}
boost::thread::attributes attrs = ...;
boost::thread t (attrs,
boost::bind (WorkerThread, 10));
Eğer Callable nesnesine parametre geçmek gerekmeseydi şöyle yapardık.boost::thread::attributes attrs = ...;
boost::thread t (attrs, WorkerThread);
join metodu
Açıklaması şöyle
"When the interrupted thread next executes one of the specified interruption points (or if it is currently blocked whilst executing one) with interruption enabled, then a boost::thread_interrupted exception will be thrown in the interrupted thread."Şöyle yaparız. Daha sonra thread'in join() veya timed_join() metodunu çağırıp bitmesini beklemek gerekir.
t.interrupt();
operator = metodu
detach edilmiş bir thread'e yeniden bir şey bağlamak için şöyle yaparız.
Şöyle yaparız. detach edilmiş bir thread'e yeniden bir şey bağlamak için şöyle yaparız.
boost::thread th = boost::thread(a_lengthy_function);
th.detach();
th = boost::thread(another_function);
timed_join metodut.timed_join(boost::posix_time::milliseconds(timeout_ms));
try_join_for metoduÖrnek ver
swap metodu
Şöyle yaparız.
t.swap(boost::thread(&some_func));
Hiç yorum yok:
Yorum Gönder