int SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout)
sem | セマフォ |
timeout | ミリ秒単位の待ち時間 |
SDL_atomic_t done;
SDL_sem *sem;
SDL_AtomicSet(&done, 0);
sem = SDL_CreateSemaphore(0);
.
.
Thread A:
while (!SDL_AtomicGet(&done)) {
add_data_to_queue();
SDL_SemPost(sem);
}
Thread B:
const Uint32 timeout = 1000; /* 1秒ごとに動作する */
while (!SDL_AtomicGet(&done)) {
if (SDL_SemWaitTimeout(sem, timeout) == 0 && data_available()) {
get_data_from_queue();
}
... ここで他の処理を行う
}
.
.
SDL_AtomicSet(&done, 1);
SDL_SemPost(sem);
wait_for_threads();
SDL_DestroySemaphore(sem);
セマフォsemの値が正になる, 割り込みが発生する, エラーが発生する, または待ち時間が経過するまでこの関数を呼んだスレッドを停止する. 呼び出しが成功すれば, セマフォの値をアトミックに減算する.