目次 - API(機能別) - スレッド - SDL_WaitThread

# SDL_WaitThread

スレッドが終了するまで待つ

## 構文

`void SDL_WaitThread(SDL_Thread* thread, int* status)`

## 引数

thread | SDL_CreateThread()で開始されたスレッドのSDL_Threadポインタ
status | スレッド関数がreturnで戻した値を代入する整数の変数へのポインタ

## サンプルコード

``

    #include <stdio.h>
    #include "SDL_thread.h"
    #include "SDL_timer.h"

    // とても簡単なスレッド - 50ms間隔で0から9までカウントする
    int TestThread(void *ptr)
    {
        int cnt;

        for (cnt = 0; cnt < 10; ++cnt) {
            printf("\nスレッドカウンタ: %d", cnt);
            SDL_Delay(50);
        }

        return cnt;
    }

    int main(int argc, char *argv[])
    {
        SDL_Thread   *thread;
        SDL_threadID threadID;
        int          threadReturnValue;

        printf("\n簡単なSDL_CreateThreadのテスト:");

        // 単にスレッドを生成する
        thread = SDL_CreateThread(TestThread, "TestThread", (void *)NULL);

        if (NULL == thread) {
            printf("\nSDL_CreateThread 失敗: %s\n", SDL_GetError());
            exit(-1);
        }

        // 新しく開始されたスレッドのIDを得る
        threadID = SDL_GetThreadID(thread);

        // スレッドの完了を待ち戻り値を得る
        SDL_WaitThread(thread, &threadReturnValue);
        printf("\nスレッドの戻り値: %d", threadReturnValue);

        return 0;
    }

## 詳細

スレッドの終了を待つ. デタッチされていないスレッドは, この関数で消滅するまで(「ゾンビ」のように)残る. これを行わないとリソースリークを引き起こす.

この関数でスレッドが消滅すると, そのSDL_Threadは使えなくなるので再び参照してはならない. 1つのスレッドの終了をSDL_WaitThread()で待つのは, 別の1つのスレッドのみにしたほうがよい.

スレッド関数の戻り値は, statusがNULLでなければ, statusの領域に書き込まれる.

デタッチされたスレッドに対してSDL_WaitThread()を呼んではならない. SDL_WaitThread()かSDL_DetachThread()のどちらかであり, 両方を使ってはならない. さもなくば, その動作は未定義のものになる.

引数をNULLとしても安全である. その場合は無視される.

threadポインタはこの関数で解放されるため, その後は使えないので注意すること.

## 関連項目(関数)

SDL_CreateThread
SDL_DetachThread

## SDL Wikiへのリンク

SDL_WaitThread - SDL Wiki