SDL_Thread* SDL_CreateThread(SDL_ThreadFunction fn, const char* name, void* data)
fn | 新しいスレッドで呼ぶ関数 (詳細を参照すること) |
name | スレッドの名前 (詳細を参照すること) |
data | fnへ渡すポインタ |
#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()で得られる.