目次 - API(機能別) - 同期プリミティブ - SDL_SemWaitTimeout

# SDL_SemWaitTimeout

セマフォの値が正になるまで待機し, セマフォの値を減算する

## 構文

`int SDL_SemWaitTimeout(SDL_sem* sem, Uint32 ms)`

## 引数

sem | セマフォ
ms | ミリ秒単位の待ち時間

## 戻り値

待機操作に成功したとき0, 待ち時間内に待機操作に成功しなかったときSDL_MUTEX_TIMEDOUT, 失敗のとき負の数のエラーコードを戻す. SDL_GetError()で詳細を知ることができる.

## サンプルコード

``

    SDL_atomic_t done;
    SDL_sem *sem;

    SDL_AtomicSet(&done, 0);
    sem = SDL_CreateSemaphore(0);
    .
    .
    Thread A:
        while (!SDL_AtomicGet(&done)) {
            add_data_to_queue();
            SDL_SemPost(sem);
        }

    Thread B:
        const Uint32 timeout = 1000; /* 1秒ごとに動作する */

        while (!SDL_AtomicGet(&done)) {
            if (SDL_SemWaitTimeout(sem, timeout) == 0 && data_available()) {
                get_data_from_queue();
            }
            ... ここで他の処理を行う
        }
    .
    .
    SDL_AtomicSet(&done, 1);
    SDL_SemPost(sem);
    wait_for_threads();
    SDL_DestroySemaphore(sem);

## 詳細

セマフォsemの値が正になる, 割り込みが発生する, エラーが発生する, または待ち時間が経過するまでこの関数を呼んだスレッドを停止する. 呼び出しが成功すれば, セマフォの値をアトミックに減算する.

## 関連項目(関数)

SDL_CreateSemaphore
SDL_DestroySemaphore
SDL_SemPost
SDL_SemTryWait
SDL_SemValue
SDL_SemWait

## SDL Wikiへのリンク

SDL_SemWaitTimeout - SDL Wiki