Declrations
class thread; class thread_error;
Overview
thread は,スレッドの作成,操作を行うためのクラスです. boost::thread のインターフェースをベースに,pthread および win32 thread を用いて実装を行っています.UNIX 環境(cygwin 版 gcc を含む)で thread モジュールを利用する際は,リンクオプション -lpthread を指定して下さい.
スレッドは,コンストラクタ,または start() メソッドに, 作成されたスレッドが呼び出す関数(または関数オブジェクト)を指定して作成します. 指定できる関数(または,関数オブジェクト)は以下のような形になります.
void function(); class functor { public: void operator()(); };
thread は,実行中に何らかのエラーが発生した場合は,thread_error を例外として送出します.
Sample
#include <iostream> #include "clx/thread.h" clx::mutex m_; class exfunctor { public: exfunctor() : c_('a') {} explicit exfunctor(char c) : c_(c) {} virtual ~exfunctor() {} void operator()() { for (int i = 0; i < 10; i++) { clx::mutex::scoped_lock lk(m_); for (int j = 0; j < i+5; j++) std::cout << c_ << std::flush; std::cout << '\n' << std::flush; } } private: char c_; }; int main(int argc, char* argv[]) { try { clx::thread t1(exfunctor('A')); clx::thread t2(exfunctor('B')); t1.join(); t2.join(); } catch (clx::system_error &e) { std::cerr << e.what() << std::endl; std::exit(-1); } std::cout << std::endl; std::cout << "end of main thread" << std::endl; return 0; }
Result AAAAA BBBBB AAAAAA BBBBBB AAAAAAA BBBBBBB AAAAAAAA BBBBBBBB AAAAAAAAA BBBBBBBBB AAAAAAAAAA BBBBBBBBBB AAAAAAAAAAA BBBBBBBBBBB AAAAAAAAAAAA BBBBBBBBBBBB AAAAAAAAAAAAA BBBBBBBBBBBBB AAAAAAAAAAAAAA BBBBBBBBBBBBBB end of main thread
Related Types
typedef ... handle_pointer;
Construction and Member Functions
thread(); template <class Functor> explicit thread(Functor f, bool detached = false); virtual ~thread(); template <class Functor> void start(Functor f, bool detached = false); bool joinable() const; void join(); void detach(); void sleep(double sec); handle_id_type get_id();
通常,作成したスレッドは join() メソッドで終了を待つ必要があります.これに対して, コンストラクタか start() メソッドの第 2 引数に true を指定した場合,または,detach() メソッドを呼んだ場合は,スレッドが終了すると自動的にリソースの開放などの終了処理が行われます.