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

SDL_WaitConditionTimeout

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

ヘッダ

SDL3/SDL_mutex.h

構文

bool SDL_WaitConditionTimeout(SDL_Condition *cond, SDL_Mutex *mutex, Sint32 timeoutMS);

引数

SDL_Condition *cond待つ条件変数
SDL_Mutex *mutexスレッドアクセスを制御するためのミューテックス
Sint32timeoutMSミリ秒単位の最大待ち時間. -1のとき無制限に待つ

戻り値

(bool) 条件変数が通知されたとき真, 通知されずに待ち時間が経過したとき偽を戻す.

詳細

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

mutexはこの関数を呼ぶ前にロックされている必要がある. ミューテックスの再帰ロック(複数回のロック)には対応しておらず, その場合の動作は未定義である.

バージョン

SDL 3.2.0以降

サンプルコード

bool condition = false;
SDL_Mutex *lock;
SDL_Condition *cond;
lock = SDL_CreateMutex();
cond = SDL_CreateCondition();

Thread_A:
    const Uint32 timeout = 1000; /* 1秒ごとに動作する */
    bool done = false;
    while (!done) {
        SDL_LockMutex(lock);
        while (!condition && SDL_WaitConditionTimeout(cond, lock, timeout) == 0) {
            continue;
        }
        SDL_UnlockMutex(lock);
        if (condition) {
            /* ... */
        }
        /* ... ここで周期的な処理を行う */
    }
Thread_B:
    SDL_LockMutex(lock);
    /* ... */
    condition = true;
    /* ... */
    SDL_SignalCondition(cond);
    SDL_UnlockMutex(lock);

SDL_DestroyCondition(cond);
SDL_DestroyMutex(lock);

関連項目

SDL Wikiへのリンク

SDL_WaitConditionTimeout - SDL Wiki