# OS_WakeupThread

## 構文

      #include <nitro/os.h>

      void OS_WakeupThread( OSThreadQueue*  queue );

## 引数

queue | 復帰させるスレッドが登録されているのスレッドキューへのポインタ

## 返り値

なし。

## 説明

指定されたスレッドキュー中のスレッドを全て復帰します。
スレッドキュー queue が指定された `OS_SleepThread()` で一時停止状態になっているスレッドをまとめて実行可能状態にします。その後スレッドは、優先順位に従ってスケジューリングされます。優先順位は `OS_CreateThread()` でスレッドを作成するときに与えたもので、同じ優先度の場合、内部リストの状態に依りますのでどちらが優先されるかはユーザ側からは不定です。なおスレッドキューにスレッドを登録した順序には関係ありません。

以下は `OS_WakeupThread()`を用いた例です。

> (例)
> `#define THREAD1_PRIO 1
> #define THREAD2_PRIO 2
> #define STACK_SIZE 1024
> void proc1( void );
> void proc2( void );
> OSThread thread1;
> OSThread thread2;
> OSThreadQueue queue;
> u64 stack1[ STACK_SIZE / sizeof(u64) ];
> u64 stack2[ STACK_SIZE / sizeof(u64) ];
> void nitroMain()
> {
> ：
> OS_InitThread();
> OS_InitThreadQueue( &queue );
> OS_CreateThread( &thread1, proc1, stack1+STACK_SIZE/sizeof(u64),
> STACK_SIZE, THREAD1_PRIO );
> OS_CreateThread( &thread2, proc2, stack2+STACK_SIZE/sizeof(u64),
> STACK_SIZE, THREAD2_PRIO );
> OS_WakeupThreadDirect( &thread1 );
> OS_WakeupThreadDirect( &thread2 );
> ：
> while(1)
> {
> ：
> OS_WakeupThread( &queue );
> ：
> }
> }
> void proc1( void )
> {
> while(1)
> {
> ：
> OS_SleepThread( &queue );
> ：
> }
> }
> void proc2( void )
> {
> while(1)
> {
> ：
> OS_SleepThread( &queue );
> ：
> }
> }`

## 参照

`OS_InitThread, OS_CreateThread, OS_SleepThread, OS_WakeupThreadDirect
`

## 履歴

2004/03/12 同じ優先順位の場合の記述変更
2003/12/01 初版