SYFBR syFbrCreateFiber( lpStack, dwStackSize, lpFunc, lpParam )
Void* lpStack
Uint32 dwStackSize
Void (*lpFunc)(Void*)
Void* lpParam
lpStack 作成するファイバのスタックアドレス dwStackSize ファイバスタックのサイズ(バイト) lpFunc ファイバとして実行する関数(ファイバ関数)のアドレス lpParam ファイバデータ
非SYD_FBR_NULL 正常終了:生成されたファイバのハンドル SYD_FBR_NULL 異常終了
新しいファイバの実行コンテキストを生成します。 但しsyFbrSwitchToFiber()関数等により明示的にファイバを切りかえるまでは、 ファイバ関数は実行されません。ファイバのスタックは、生成されたファイバが実行する再に使用するスタックです。 スタックは、(1024+32+(必要なスタックサイズ))バイト以上を容易して下さい。
必要なスタックサイズとは、 そのファイバ関数及びそこから呼び出される関数(ライブラリ含む)で消費されるスタック分を指定してください。
ファイバ関数は次のようにプロトタイプ宣言されている必要があります。
void FiberFunc( void* lpParam ) ;
ファイバデータは、ファイバ生成・変換時に指定する32bitのデータで そのファイバが実行されているときに、syFbrGetFiberData()関数で参照できます。
この関数が異常終了したときは次の原因が考えられます。
- パラメータ不正(lpStackがNULL,dwStackSizeが0,lpFuncがNULL)
- スタックサイズが不足(1024+32バイト以下)
- ファイバの生成最大値を超えて変換する場合
#define STACKSIZE (4096) ... static SYFBR FbrHandle1 ; static Uint32 fbrStack[ STACKSIZE ] ; ... void InitFiber(void) { void Thread1 ( void* p ) ; ... FbrHandle1 = syFbrCreateFiber((void*)fbrStack, STACKSIZE, Thread1, NULL); ... } Void Thread1( Void* p ) { while( 1 ){ g_no++ ; syFbrSwitchToFiber( gFiberMain ) ; } }
syFbrGetFiberData() 実行中のファイバのファイバデータを取得 syFbrSwitchToFiber() ファイバの切り替え syFbrDelayedSwitchToFiber() 割り込みを契機としたファイバの切り替え