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

# SDL_DetachThread

スレッドが終了したとき自分で消滅するようにする

## 構文

`void SDL_DetachThread(SDL_Thread* thread)`

## 引数

thread | SDL_CreateThread()で開始されたスレッドのSDL_Threadポインタ

## サンプルコード

``

    extern int TestThread(void *ptr);
    SDL_Thread *thread = SDL_CreateThread(TestThread, "TestThread", (void *)NULL);
    SDL_DetachThread(thread);  /* 完了したとき自分で消滅するようになる */

## 詳細

あるスレッドが他のスレッドでSDL_WaitThread()が呼ばれるまで残る必要がないとき「デタッチ」する. デタッチは, 他と同期する必要のない, または管理する必要のない長い時間実行されるスレッドに対して使うと便利である. デタッチされたスレッドが完了すると, そのスレッドはすぐに消滅する.

デタッチされたスレッドの戻り値を知る方法はない. それが必要ならば, スレッドをデタッチせず, 代わりにSDL_WaitThread()を使うこと.

デタッチされたスレッドは, 通常はそのSDL_Threadを再び参照することは安全でないと考える必要がある. そのスレッドが終了すると, 他のスレッドがSDL_WaitThread()を呼ぶまで残るのではなく, すぐに利用できなくなるためである. また, 同じスレッドを2回以上デタッチしてはならない.

SDL_DetachThread()を呼んだとき既にスレッドが終了していれば, そのスレッドはSDL_WaitThread()が呼ばれるのを待たずにすぐに消滅する. SDL_WaitThread()を使う可能性があるスレッドをデタッチするのは安全ではない.

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

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

## バージョン

SDL 2.0.2以降

## 関連項目(関数)

SDL_CreateThread
SDL_WaitThread

## SDL Wikiへのリンク

SDL_DetachThread - SDL Wiki