##### Shinobi Library - ファイバ関数

# syFbrCreateFiber

ファイバの生成

### 書式

> `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()関数で参照できます。

> この関数が異常終了したときは次の原因が考えられます。

> 1. パラメータ不正(lpStackがNULL,dwStackSizeが0,lpFuncがNULL)
> 2. スタックサイズが不足(1024+32バイト以下)
> 3. ファイバの生成最大値を超えて変換する場合

### 用例

>     #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() | 割り込みを契機としたファイバの切り替え

syFbrCreateFiber

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000