SDL_Thread * SDL_CreateThreadWithProperties(SDL_PropertiesID props);
| SDL_PropertiesID | props | 使用するプロパティグループ |
これらのプロパティに対応している:
SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER: SDL_ThreadFunction型の値. 新しいスレッドの開始時に呼ばれる関数. 必須
SDL_PROP_THREAD_CREATE_NAME_STRING: 新しいスレッドの名前. デバッガで利用される可能性がある. 任意. デフォルトはNULL
SDL_PROP_THREAD_CREATE_USERDATA_POINTER: アプリケーション定義の任意のポインタ. 新しいスレッドの関数に引数として渡される. 任意. デフォルトはNULL
SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER: 新しいスレッドのバイト単位のスタックサイズ. 任意. デフォルトは0(システムの定義したデフォルト)
SDLはSDL_PROP_THREAD_CREATE_NAME_STRINGをシステムに報告しようとするため, デバッガがこれを表示できる可能性がある. 全ての環境が対応しているわけではない.
スレッドの命名はやや複雑である: 多くのシステムでは文字列の長さに制限があり(Haikuは32バイト, 現在のLinuxは16バイト, Visual C++ 6.0は9バイト), 他の強制的なルールがある場合もある. システムのデバッガがどうなっているか確認する必要がある. この名前はUTF-8の必要がある(しかしCの識別子の名前の方がよいだろう). スレッドの命名にはNUL終端のUTF-8文字列であること以外の規約はないが, 次のガイドラインが役立つ:
https://stackoverflow.com/questions/149932/naming-conventions-for-threads
システムの要求が強制される場合, SDLは文字列を変更する(後ろを切り捨てる等)が, 元の文字列はSDL_GetThreadName()で得られる.
SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBERでスタックのサイズ(バイト数)を指定できる. 0は「システムのデフォルトを使用」を意味し, 環境によって大きく異なる. x86 Linuxの一般的なデフォルトは8メガバイトだが, 組み込みデバイスの場合は数キロバイトの場合もある. 一般的にはシステムのページサイズ(多くの場合4キロバイトだがシステムのドキュメントをチェックすること)の倍数を指定する必要がある.
この「関数」は実際にはマクロであり, ここに挙げられていない2つの引数を内部関数に渡している. そのプリプロセッサマクロで隠された引数は, この関数の呼び出しの時点で様々なCランタイムに対応するために必要なものである. Cヘッダを使用しない言語では, この引数を扱う必要がある.
SDLでの実際のシンボルはSDL_CreateThreadWithPropertiesRuntimeのため, 衝突するシンボルはないが, SDL共有ライブラリから"SDL_CreateThreadWithProperties"を探すと失敗する.
通常, アプリケーションはこの関数をどの環境でも同じように呼び, 詳細はマクロに隠させればよい.