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