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

SDL_CreateThread

新しいスレッドをデフォルトのスタックサイズで生成する

ヘッダ

SDL3/SDL_thread.h

構文

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

引数

SDL_ThreadFunctionfn新しいスレッドで呼ぶ関数
const char *nameスレッドの名前
void *datafnへ渡すポインタ

戻り値

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

詳細

この関数は便利のための関数であり, 効果はSDL_CreateThreadWithPropertiesに次のプロパティを設定した場合と同様である:

この「関数」は実際にはマクロであり, ここに挙げられていない2つの引数を内部関数に渡している. そのプリプロセッサマクロで隠された引数は, この関数の呼び出しの時点で様々なCランタイムに対応するために必要なものである. Cヘッダを使用しない言語では, この引数を扱う必要がある.

通常, アプリケーションはこの関数をどの環境でも同じように呼び, 詳細はマクロに隠させればよい.

バージョン

SDL 3.2.0以降

サンプルコード

#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>

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

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

    return cnt;
}

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

    SDL_Log("単純なSDL_CreateThreadのテスト:");

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

    if (NULL == thread) {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_CreateThread 失敗: %s", SDL_GetError());
    } else {
        SDL_WaitThread(thread, &threadReturnValue);
        SDL_Log("スレッドの戻り値: %d", threadReturnValue);
    }

    return 0;
}

/*
 * 出力:
 * 単純なSDL_CreateThreadのテスト:
 * スレッドカウンタ: 0
 * スレッドカウンタ: 1
 * スレッドカウンタ: 2
 * スレッドカウンタ: 3
 * スレッドカウンタ: 4
 * スレッドカウンタ: 5
 * スレッドカウンタ: 6
 * スレッドカウンタ: 7
 * スレッドカウンタ: 8
 * スレッドカウンタ: 9
 * スレッドの戻り値: 10
 */

関連項目

SDL Wikiへのリンク

SDL_CreateThread - SDL Wiki