目次 - SDL 3.0 API(機能別) - 非同期I/O - SDL_WaitAsyncIOResult

SDL_WaitAsyncIOResult

キューの非同期I/Oタスクが完了するまでブロックして待つ

ヘッダ

SDL3/SDL_asyncio.h

構文

bool SDL_WaitAsyncIOResult(SDL_AsyncIOQueue *queue, SDL_AsyncIOOutcome *outcome, Sint32 timeoutMS);

引数

SDL_AsyncIOQueue *queueチェックするSDL_AsyncIOキュー
SDL_AsyncIOOutcome *outcomeタスクの完了結果の代入先へのポインタ. NULL不可
Sint32timeoutMSミリ秒単位の最大待ち時間. -1のとき無限に待つ

戻り値

(bool) タスクが完了したとき真, それ以外のとき偽を戻す.

詳細

この関数はキューのタスクが完了するまでスレッドを停止させる.

キューのタスクが完了すると, この関数は真を戻し, outcomeにタスクの詳細が設定される. 完了したタスクがない場合, この関数は偽を戻す.

タスクが完了すると, この関数はタスクの資源を解放しタスクへのポインタは無効になり, タスクはキューから取り除かれる.

同一のキューに対して複数のスレッドからこの関数を呼ぶことは安全である. 完了したタスクは1つのスレッドのみに伝えられる.

1つのタスクの完了を待つ複数のスレッドのブロックが解除されることがあるが, 実際にタスクを得たのは1つのスレッドだけのため, timeoutMSは最大待ち時間だが, この関数はそれよりも早く偽を戻すことがあるので注意すること.

この関数は, システムのエラーが発生した, またはOSが意図せず複数のスレッドでブロックを解除した, またはSDL_SignalAsyncIOQueue()が呼ばれて未完了のタスクのあるスレッドのブロックが解除されたとき偽を戻す.

タイムアウトで最大待ち時間を指定できるが, ポーリングではなく, タイムアウトを-1とすることで無制限に待ちSDL_SignalAsyncIOQueue()で待機中のスレッドのブロックを解除することもできる.

スレッドセーフ

この関数はどのスレッドからも安全に呼べる.

バージョン

SDL 3.2.0以降

関連項目

SDL Wikiへのリンク

SDL_WaitAsyncIOResult - SDL Wiki