目次 - SDL 3.0 API(機能別) - I/Oストリーム - SDL_CloseAsyncIO

SDL_CloseAsyncIO

非同期I/O操作をクローズして資源を解放する

ヘッダ

SDL3/SDL_iostream.h

構文

bool SDL_CloseAsyncIO(SDL_AsyncIO *asyncio, bool flush, SDL_AsyncIOQueue *queue, void *userdata);

引数

SDL_IOStream *contextクローズするSDL_IOStreamへのポインタ
boolflush真のときタスクを完了する前にディスクと同期させる
SDL_AsyncIOQueue *queue新しいSDL_AsyncIOの追加先キュー
void *userdata処理結果に渡されるアプリケーション定義のポインタ

戻り値

(bool) 成功のとき真, 失敗のとき偽を戻す. SDL_GetError()を呼んで詳細を知ることができる.

詳細

ファイルのクローズ非同期なタスクである. 例えば, 閉じる処理の途中で書き込みに失敗した場合, 処理の結果は通常通り報告される.

書き込まれたファイルを閉じても物理メディアに書き込まれる保証はない. データはOSのファイルキャッシュ内にあり, ディスクへの書き込みを待っている可能性がある. これはクローズに成功したファイルも, 短い時間でシステムがクラッシュしたり, 電源が喪失するなどして失われる可能性があることを意味している. これを避けるためには, この関数のflush引数を真にして呼ぶこと. これは操作により多くの時間がかかり, 一般的にはシステムの負荷が増すが, 結果が成功のときデータが物理メディアに書き込まれたことを保証する. これは一時ファイル, キャッシュ, 重要でないデータに対して使用するのではなく, ゲームのセーブデータなどの代用の効かないファイルに使用するべきである.

この関数は, 保留中のasyncioのタスクの処理後にクローズすることが保証されている. そのため, ファイルをオープンし, いくつかの操作を開始して, 直後にファイルを閉じ, その後で全ての結果をチェックしても安全である. この関数は全てのタスクの完了をブロックして待たない.

この関数が真を戻すと, その後の結果に関わらずasyncioは無効になる. 完了したタスクのポインタはSDL_AsyncIOOutcomeのデータに含まれているが, これはアプリケーションの追跡のための情報で, 再び使用することはできない.

この関数が偽を戻した場合, クローズ処理はまったく行われていない, 後で再びクローズすることは安全である.

SDL_AsyncIOQueueは必ず指定しなければならない. クローズ処理が完了したとき, 新しいタスクが生成されここに追加される.

スレッドセーフ

この関数はどのスレッドからも安全に呼べるが, 複数のスレッドから同一のオブジェクトをクローズしてはならない.

バージョン

SDL 3.2.0以降

SDL Wikiへのリンク

SDL_CloseAsyncIO - SDL Wiki