目次 - 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