bool SDL_CloseAsyncIO(SDL_AsyncIO *asyncio, bool flush, SDL_AsyncIOQueue *queue, void *userdata);
| SDL_IOStream * | context | クローズするSDL_IOStreamへのポインタ |
| bool | flush | 真のときタスクを完了する前にディスクと同期させる |
| SDL_AsyncIOQueue * | queue | 新しいSDL_AsyncIOの追加先キュー |
| void * | userdata | 処理結果に渡されるアプリケーション定義のポインタ |
ファイルのクローズも非同期なタスクである. 例えば, 閉じる処理の途中で書き込みに失敗した場合, 処理の結果は通常通り報告される.
書き込まれたファイルを閉じても物理メディアに書き込まれる保証はない. データはOSのファイルキャッシュ内にあり, ディスクへの書き込みを待っている可能性がある.
これはクローズに成功したファイルも, 短い時間でシステムがクラッシュしたり, 電源が喪失するなどして失われる可能性があることを意味している.
これを避けるためには, この関数のflush引数を真にして呼ぶこと.
これは操作により多くの時間がかかり, 一般的にはシステムの負荷が増すが, 結果が成功のときデータが物理メディアに書き込まれたことを保証する.
これは一時ファイル, キャッシュ, 重要でないデータに対して使用するのではなく, ゲームのセーブデータなどの代用の効かないファイルに使用するべきである.
この関数は, 保留中のasyncioのタスクの処理後にクローズすることが保証されている. そのため, ファイルをオープンし, いくつかの操作を開始して, 直後にファイルを閉じ, その後で全ての結果をチェックしても安全である.
この関数は全てのタスクの完了をブロックして待たない.
この関数が真を戻すと, その後の結果に関わらずasyncioは無効になる.
完了したタスクのポインタはSDL_AsyncIOOutcomeのデータに含まれているが, これはアプリケーションの追跡のための情報で, 再び使用することはできない.
この関数が偽を戻した場合, クローズ処理はまったく行われていない, 後で再びクローズすることは安全である.
SDL_AsyncIOQueueは必ず指定しなければならない. クローズ処理が完了したとき, 新しいタスクが生成されここに追加される.