microthreadのスタック




例外を処理するためには、マイクロスレッドのスタックを
OSの管理するスタック領域におかなければならない。
(Win32構造化例外の制限)

⇒ この理由等について、詳しくは「やね本2」を参照のこと。

そこで、スタック領域上にマイクロスレッドのスタックを確保してやる必要がある

このためには⇒ class CMemoryAllocatorPool を 用いると良い。

list-1
    例)
        const int stack_size = 1024*128; // 128k
        BYTE local_stack[stack_size]; // 128k
        CMemoryAllocatorPool pool;
        pool.SetMemory(&local_stack[0],stack_size);


スタック領域上に確保された配列を、
CMemoryAllocatorPoolに食わせて、それを
CMicroThreadのコンストラクタで渡す。
そうすれば、CMicroThreadのデストラクタで、suspend中の
マイクロスレッド内にCMicroThreadQuitException例外を発生させ、
開始地点までスタックの巻き戻し(デストラクタの呼び出し)を
行なうことを保証できる。

よって、このクラスを利用するには例外処理が有効でなければならない。