bool SDL_WaitConditionTimeout(SDL_Condition *cond, SDL_Mutex *mutex, Sint32 timeoutMS);
| SDL_Condition * | cond | 待つ条件変数 |
| SDL_Mutex * | mutex | スレッドアクセスを制御するためのミューテックス |
| Sint32 | timeoutMS | ミリ秒単位の最大待ち時間. -1のとき無制限に待つ |
この関数はmutexのロックを解除し, 別のスレッドがSDL_CondSignal()かSDL_CondBroadcast()を呼んで条件変数condを通知する, あるいは指定の時間が経過するまで待つ.
条件変数が通知, または指定の時間が経過すれば, mutexは再びロックされ関数から戻る.
mutexはこの関数を呼ぶ前にロックされている必要がある.
ミューテックスの再帰ロック(複数回のロック)には対応しておらず, その場合の動作は未定義である.
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);