Boost.Context はじめました
最近何かと目にする Boost.Context をちょっとつついてみました
[boost]
[ビルド]
最新版の trunk だと今まで通り bjam を叩けばライブラリが生成されるみたいです。
上記の github に上がっているソースだとうまく出力されなかったので、わたしはここら辺を参照して自力でビルドしました。
[ソース]
#include <boost/context/all.hpp> #include <iostream> void func(boost::contexts::context& ctx, std::string const& str){ for(std::string::const_iterator it = str.begin() ; it != str.end() ; ++it){ std::cout << *it; ctx.suspend(); } } int main(){ namespace c = boost::contexts; c::context ctx; ctx = c::context( // 呼ばれる関数 boost::bind(&func, boost::ref(ctx), "hello, world"), c::default_stacksize(), c::no_stack_unwind, c::return_to_caller ); // 引数をそのまま渡すことも出来る // ctx = c::context( // &func, // boost::ref(ctx), // "hello, world", // c::default_stacksize(), // c::no_stack_unwind, // c::return_to_caller // ); std::cout << "start" << std::endl; ctx.start(); while( !ctx.is_complete() ){ std::cout << " "; ctx.resume(); } std::cout << "\n"; std::cout << "done" << std::endl; return 0; }
[出力]
start h e l l o , w o r l d done
一体どんな仕組みで実装されているのか何に使うのかはまだイマイチよくわかっていませんが、面白いですね。
重い処理とかを分割して処理したりするのかしら?