ラベル Boost の投稿を表示しています。 すべての投稿を表示
ラベル Boost の投稿を表示しています。 すべての投稿を表示

2009年5月11日月曜日

IOCP使ってサーバを作る簡単な方法

the code projectとかsourceforgeとかcodeguruとか、ちょっと探せばIOCPを使うためのフレームワークやチュートリアルは山ほどヒットする。

でも、どれもいまいち。なんとなくしっくりきてなかったのだけれど、もっと身近なところにあったのね。


Windowsの実装では、asio::io_serviceがwin_iocp_io_serviceというクラスに依存していてIOCPによって実現されている。

boostならWindowsでもLinuxでも同じコード使えるし、気持ち的に安心だし、知らなくて損した気分。

Linuxの実装の基盤は何だろう?今度調べてみよう。

C10k問題とかA Design Framework for Highly Concurrent Systemsがふたたび気になり始めたなぁ

メンバ関数で自分自身のshared_ptrを得る

こんな便利な機能があるなんて知りませんでしたよ。
これを知らずにboost::shared_ptr使ってきてたことが、ある意味頑張ってたのかも。

1.38.0の実装では、メンバ変数にweak_ptrを持たせているので、x86だと4バイトのサイズ増加。
このメンバ変数はthisに対するshared_ptrを作成した時に、shared_ptrのコンストラクタで初期化されている。

enable_shared_from_this.hppのコメントに、

「コードじゃなくてドキュメントを読め」

と書いてあって、ちょっと笑えた。

2009年5月3日日曜日

boost::asioを見てみた

boostならばportableだし、知っておいて損はしない。
あまり注目していなかったけれど、ようやくasioを見てみた。
boostなだけあってライブラリのインターフェースは好きになれそう。
非同期サーバの実装の裏側はどうなってるのか興味がわいてきた。

2009年4月15日水曜日

boostproが登録制になってた

自分一人で使うなら、ソースコードからビルドして使っていれば十分なのだけど、チームで共同開発する場合には、「ソースコードからビルド・・・」なんて言おうものなら、「そんなもの使うなめんどくさい」と言われてしまう可能性が高い。

そんなときにwww.boostpro.comが便利だったのに・・・

いつのまにか、アカウント登録しないとダウンロードさせてもらえなくなってる。
「登録するのめんどくさい」って言われてしまうだろうなぁ。

しかも、ネットワークインストールになってる。
これだと、リンク先が突然なくなってしまわないかと不安で夜も眠れないよなぁ。

2009年1月28日水曜日

boost::lambdaで引数なしのラムダ関数を作る

#include <boost/function.hpp>
#include <boost/lambda/lambda.hpp>

clsss DefineCleanup
{
public:
DefineCleanup(const boost::function<void()>& finalizer)
: finalizer_(finalizer) { assert(finalizer_); }
~DefineCleanup() { finalizer_(); }
private:
const boost::function<void()> finalizer_;
};

void test()
{
static bool someone_is_inside = false;
if(someone_is_inside){ return; }
someone_is_inside = true;
DefineCleanup set_guard_false_later(boost::lambda::var(someone_is_inside) = false);

// ....
}


これは再帰呼び出しを防ぐ例。
スレッドセーフじゃないとか問題はいろいろあるだろうけれど、そこは主題じゃないから無視。