3.1.7. pfi::concurrent::thread¶
3.1.7.1. 概要¶
スレッドを操作するためのクラス。
3.1.7.2. メンバ¶
thread::thread(function<void()>);
function<void()>にコンパチブルな関数等をコンストラクタに渡す。 この時点ではまだスレッドは起動しない。
thread::~thread()
detachしておらず、さらにまだスレッドが動いている場合、 スレッドをdetachする。
bool thread::start()
startメソッドを呼べばスレッドが起動する。 失敗するとfalseを返す。
bool thread::join()
スレッドが終わるのを待つ。 start()してない、detach()済みの場合、あるいは失敗した時はfalseを返す。
void thread::detach()
スレッドをdetachする。 detachされたスレッドはjoinする必要がなくなる(joinできなくなる)。
3.1.7.2.1. staticメンバ¶
static tid_t thread::id()
呼び出したスレッドのスレッドIDを返す。
static bool sleep(double sec);
指定した秒数、自分のスレッドの実行を休止する。
static void yield();
他のスレッドに実行を明け渡す。
3.1.7.3. サンプルコード¶
void foo()
{
for (int i=0;i<10000;i++) cout<<"moge"<<endl;
}
int main()
{
thread t(&foo);
if (!t.start()){ // スレッドを立てる
// 立たなかった
...
}
t.join(); // スレッドを待つ
}
detachスレッドを作りたい場合、次のようにするのが簡単である。
thread(&foo).start();