OS_CreateThread

構文

#include <nitro/os.h>
void OS_CreateThread(
     OSThread*   thread,
     void        (*func)(void*),
     void*       arg,
     void*       stack,
     u32         stackSize,
     u32         prio );
  

引数

thread 初期化するスレッド構造体へのポインタ
func 実行を開始する関数へのポインタ
arg 実行を開始する関数へ渡す引数
stack スタックポインタの開始アドレス。スタックは下位方向に積まれていくので、 スタックの最上位の位置を指定しなければならない点に注意してください。 アドレスは4バイトアラインメントされたものである必要があります。
stackSize スタックのサイズ。単位はバイトです。4の倍数である必要があります。
prio スレッドの優先度です。 0 がもっとも高い優先度で、31 が最も低い優先度です。
なお、OSInitThread を呼び出したスレッドは、優先度 16 を持ちます。
同じ優先度を持つスレッドを作成した場合、後から作成したものが優先されます。

返り値

なし。

説明

スレッドを作成します。

thread は作成するスレッド構造体へのポインタです。スレッドは func から実行されます。arg に入れられた値は func の第一引数として扱われます。

スタック領域は stackstackSize で指定します。stack はスタックポインタの開始アドレスで、スタック領域の最上位アドレス(+1)となります。(実際にはスレッドを作成する際に、スタックのチェックコード用に4バイトが予め確保されます)

OS_CreateThread() で作成された直後のスレッドは休止状態になっていますので、OS_WakeupThreadDirect() で明示的に動作状態にしてやる必要があります。

(例)
#define THREAD_PRIO 10
#define STACK_SIZE 1024

void proc( void* arg );
OSThread thread;
u64 stack[ STACK_SIZE / sizeof(u64) ];

void nitroMain()
{
 :
 OS_InitThread();
 OS_CreateThread( &thread, proc, NULL,
            stack+STACK_SIZE/sizeof(u64), STACK_SIZE,THREAD_PRIO );

 OS_WakeupThreadDirect( &thread );
 :
}

void proc( void *arg )
{
 :
}

参照

OS_InitThread, OS_SleepThread, OS_WakeupThread, OS_WakeupThreadDirect
OS_ExitThread, OS_DestroyThread

履歴

2005/07/08 スレッド数の制限を削除
2004/11/01 スレッド数の変更について記述を追加
2004/04/27 アイドルスレッドの記述を追加
2004/02/26 arg を追加、スレッドの優先度0〜31の記述追加
2003/12/01 初版