SDL_Thread* SDL_CreateThread(SDL_ThreadFunction fn, const char* name, void* data)
fn | 新しいスレッドで呼ぶ関数 (詳細を参照すること) |
name | スレッドの名前 (詳細を参照すること) |
data | fnへ渡すポインタ |
#include <stdio.h>
#include "SDL_thread.h"
/* とても単純なスレッド - 50ms間隔で0から9までカウントする */
static int TestThread(void *ptr)
{
int cnt;
for (cnt = 0; cnt < 10; ++cnt) {
printf("スレッドカウンタ: %d\n", cnt);
SDL_Delay(50);
}
return cnt;
}
int main(int argc, char *argv[])
{
SDL_Thread *thread;
int threadReturnValue;
printf("単純なSDL_CreateThreadのテスト:\n");
/* 単にスレッドを生成する */
thread = SDL_CreateThread(TestThread, "TestThread", (void *)NULL);
if (NULL == thread) {
printf("SDL_CreateThread 失敗: %s\n", SDL_GetError());
} else {
SDL_WaitThread(thread, &threadReturnValue);
printf("スレッドの戻り値: %d\n", 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()で得られる.