Thread

スレッドを超えて例外を伝播させる その2

例外伝播テストをVC++に対応させました。 差分 あと、g++でスタック巻き戻し中で保留中の例外がある間に別の例外を投げて、その例外を伝播させようとするとクラッシュしていたので修正しました。 差分 まだ細かいバグは残ってると思うんですが、一応g++とVC+…

スレッドを超えて例外を伝播させる

今日は少し脱線して、以前から試してみたかった、スレッドを超えて例外を伝播させることに挑戦してみました。 propagate_test.cpp とりあえず、g++限定です。 例外オブジェクトはスタックに置くことはできないので、ヒープや自由領域と似たメモリに置かれて…

続 条件変数

条件変数をwait()するスレッドがwhileループで何度も条件を判定しているのは不思議に思えるかもしれません。 wait()から復帰しても「条件」を満たしていないパターンとして、 自スレッドが期待している「条件」は満たしていないが、notify_one()/notify_all(…

条件変数

今日は地味な実装ばかりで書くことないので、id:Cryolite:20060606 さんのところの条件変数(condition variable)について書いておきます。

ASIO SDKとグローバル変数

ASIOと言っても、今回はAudio Streaming I/Oの方です。 S.F. Programmingさんの話だと、ASIOのサポートはaudioライブラリとしては必要なもののようです。 これまで名前ぐらいしか知りませんでしたが、調べてみました。自分のサウンドカードは(多分)ASIOに対…

続boost::xtime

Threadで思い出した小ネタ。 id:y-hamigaki:20060208 でxtimeを操作する関数を紹介したのですが、実はそういう関数群は、libs/thread/src/timeconv.inlに書いてあります。なんでこれをヘッダで公開していないのかずっと疑問だったのですが、ちゃんとドキュメ…

続マルチスレッドと例外処理

スレッド内で捕捉されなかった例外をどう扱うのか、いろいろ調べてみました。 Boost.Thread 捨てられる C#、D、Java、Python 例外オブジェクトの文字列表現を出力する Ruby 親スレッドがjoin()で待っていれば、join()が子スレッドの例外を送出する 昨日のcop…

マルチスレッドと例外処理

C++でマルチスレッドのプログラムを書く場合、子スレッドで発生した例外を親スレッドにどう伝えるかが問題になります。C++には例外オブジェクトのディープコピーを行う統一したメカニズムはありませんから、単純に親スレッドへコピーすることはできません。

boost::xtime

う〜ん。昨日のCPU100%対策は不完全でした。 boost::sleep()の引数、boost::xtimeは次のような構造体です。 struct xtime { xtime_sec_t sec; xtime_nsec_t nsec; };使用する場合は、まずboost::xtime_get()で現在時刻を取得し、secとnsecを弄るわけですが、…