microthread




CMircoThreadは言うまでもなく(?)Pythonのマイクロスレッドです:
http://www-6.ibm.com/jp/developerworks/linux/020809/j_l-pythrd.html
C++で実装する関係上、stacklessではなく事前確保したstack contextの
切り替えになるんですが。これにより、シーンクラス等が退屈なFSM(有限状態マ
シン)になることなくプログラムできるわけです。

このクラスを通じて呼び出した関数は、関数の途中でresumeし、次に呼び出されたときに、以前の状態を再現することが出来る

list-1 プログラム例
        void    OnMove(){
            if (!microthread_.isEnd()){
                if (!microthread_.isSuspended()) {
                    smart_ptr<function_callback> fn(function_callback_v::Create(&CCharacter2::microthread));
                    microthread_.start(fn);
                } else {
                    microthread_.resume();
                }
            }
        }
        void MainThread(){
            int i,x=100,y=200;
            for(i=0;i<100;++i) { x+=2; suspend(); }
            for(i=0;i<100;++i) { y+=2; suspend(); }
        }
        void suspend() { microthread_.suspend(); }


このようにすれば、OnMoveを呼び出すごとに、x+=2を100回OnMoveを呼び出す間、繰り返し101回目のOnMoveの呼び出しからは、y+=2を実行します。それを100回繰り返したあと、またx+=2に戻ります。