int SDL_CondWaitTimeout(SDL_cond* cond, SDL_mutex* mutex, Uint32 ms)
cond | 待つ条件変数 |
mutex | スレッドアクセスを制御するためのmutex |
ms | ミリ秒単位の最大待ち時間. SDL_MUTEX_MAXWAITのとき無制限に待つ |
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はこの関数を呼ぶ前にロックされている必要がある.