スレッド、なんとなく使えるようになりました

いい加減templateを真面目に勉強しないといけないなと思いました(・ω・`


さて。昨日の続き。
> なんかcreate_threadみたいな関数とかないのかなぁ。

結論: ありました

#include <boost/thread.hpp>

int main(void){
boost::thread_group tg;

while(1){
  if(スレッド作れ){
    tg.create_thread(thrFunc);
  }
}

tg.join_all();
return 0;
}

thread_groupってのがスレッド専用のコンテナで用意されてるらしいです。


さて、今日の困ったこと

#include <boost/thread.hpp>
#include <iostream>
#include <stdlib>

void throwFunc(void){
  throw 0;
}

int main(void){
  try{
    boost::thread thr(throwFunc);
    std::cout << "main goes to finish" << std::endl;
    thr.join();
  } catch(int i){
    std::cout << "catch" << std::endl;
    exit(-1);
  }
  return 0;
}

例外を投げるだけのスレッドを作って実行させる。それだけ。

私の予想では

catch

とだけ出て死んでくれると思ったのですが、実際はmain goes...と出て正常終了してしまいました。
どうやら他スレッドの例外はmainスレッドではcatchできない様子。
こーいう場合は状態変数とか作って上手いことハンドルしてやらないといけないんでしょうかねぇ。