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

# SDL_CondWaitTimeout

条件変数が通知されるか指定の時間が経過するまで待つ

## 構文

`int SDL_CondWaitTimeout(SDL_cond* cond, SDL_mutex* mutex, Uint32 ms)`

## 引数

cond | 待つ条件変数
mutex | スレッドアクセスを制御するためのmutex
ms | ミリ秒単位の最大待ち時間. SDL_MUTEX_MAXWAITのとき無制限に待つ

## 戻り値

条件変数が通知されたとき0, 通知されずに待ち時間が経過したときSDL_MUTEX_TIMEDOUT, 失敗のとき負の数のエラーコードを戻す. SDL_GetError()で詳細を知ることができる.

## サンプルコード

``

    SDL_bool condition = SDL_FALSE;
    SDL_mutex *lock;
    SDL_cond *cond;

    lock = SDL_CreateMutex();
    cond = SDL_CreateCond();
    .
    .
    Thread A:
        const Uint32 timeout = 1000; /* 1秒ごとに動作する */

        while (!done) {
            SDL_LockMutex(lock);
            while (!condition && SDL_CondWaitTimeout(cond, lock, timeout) == 0) {
                continue;
            }
            SDL_UnlockMutex(lock);

            if (condition) {
                ...
            }

            ... ここで周期的な処理を行う
        }

    Thread B:
        SDL_LockMutex(lock);
        ...
        condition = SDL_TRUE;
        ...
        SDL_CondSignal(cond);
        SDL_UnlockMutex(lock);
    .
    .
    SDL_DestroyCond(cond);
    SDL_DestroyMutex(lock);

## 詳細

この関数はmutexのロックを解除し, 別のスレッドがSDL_CondSignal()かSDL_CondBroadcast()を呼んで条件変数condを通知する, あるいは指定の時間が経過するまで待つ. 条件変数が通知, または指定の時間が経過すれば, mutexは再びロックされ関数から戻る.

mutexはこの関数を呼ぶ前にロックされている必要がある.

## 関連項目(関数)

SDL_CondBroadcast
SDL_CondSignal
SDL_CondWait
SDL_CreateCond
SDL_DestroyCond

## SDL Wikiへのリンク

SDL_CondWaitTimeout - SDL Wiki