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

# SDL_CreateThread

新しいスレッドを生成する

## 構文

`SDL_Thread* SDL_CreateThread(SDL_ThreadFunction fn, const char* name, void* data)`

## 引数

fn | 新しいスレッドで呼ぶ関数 (詳細を参照すること)
name | スレッドの名前 (詳細を参照すること)
data | fnへ渡すポインタ

## 戻り値

成功のとき新しいスレッドオブジェクトへの不透明ポインタ(opaque pointer), 失敗のときNULLを戻す. SDL_GetError()で詳細を知ることができる.

## サンプルコード

``

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

    // とても簡単なスレッド - 50ms間隔で0から9までカウントする
    static 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_CreateThreadの簡単なテスト:
    スレッドカウンタ: 0
    スレッドカウンタ: 1
    スレッドカウンタ: 2
    スレッドカウンタ: 3
    スレッドカウンタ: 4
    スレッドカウンタ: 5
    スレッドカウンタ: 6
    スレッドカウンタ: 7
    スレッドカウンタ: 8
    スレッドカウンタ: 9
    スレッドの戻り値: 10

## 詳細

SDL_CreateThread()は, グローバルメモリ, シグナルハンドラ, ファイルディスクリプタ等の全てを親と共有する新しいスレッドを生成し, 関数fnにvoidポインタのdataを渡し実行する. 関数fnから戻るとスレッドは終了する.

fnの関数プロトタイプは

`int SDL_ThreadFunction(void* data)`

引数は

data | SDL_CreateThread()に渡したdata

スレッドの名前はNUL文字で終わるUTF-8文字列であれば何でもよいが, 次の指針が役立つかもしれない.

http://stackoverflow.com/questions/149932/naming-conventions-for-threads

システムが名前を強制する場合, SDLはその名前に変換する. しかし, 元の文字列はSDL_GetThreadName()で得られる.

## 関連項目(関数)

SDL_WaitThread

## SDL Wikiへのリンク

SDL_CreateThread - SDL Wiki