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

SDL_CreateThread

新しいスレッドをプロパティを指定して生成する

ヘッダ

SDL3/SDL_thread.h

構文

SDL_Thread * SDL_CreateThreadWithProperties(SDL_PropertiesID props);

引数

SDL_PropertiesIDprops使用するプロパティグループ

戻り値

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

詳細

これらのプロパティに対応している:

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"を探すと失敗する.

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

バージョン

SDL 3.2.0以降

関連項目

SDL Wikiへのリンク

SDL_CreateThread - SDL Wiki