SDL_Thread * SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data);
| SDL_ThreadFunction | fn | 新しいスレッドで呼ぶ関数 |
| const char * | name | スレッドの名前 |
| void * | data | fnへ渡すポインタ |
この関数は便利のための関数であり, 効果はSDL_CreateThreadWithPropertiesに次のプロパティを設定した場合と同様である:
fn
name
data
この「関数」は実際にはマクロであり, ここに挙げられていない2つの引数を内部関数に渡している. そのプリプロセッサマクロで隠された引数は, この関数の呼び出しの時点で様々なCランタイムに対応するために必要なものである. Cヘッダを使用しない言語では, この引数を扱う必要がある.
通常, アプリケーションはこの関数をどの環境でも同じように呼び, 詳細はマクロに隠させればよい.
#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
*/