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() メソッドを呼んだ場合は,スレッドが終了すると自動的にリソースの開放などの終了処理が行われます.