/* 永久等待條件變量返回 */
int
SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex)
{
return SDL_CondWaitTimeout(cond, mutex, SDL_MUTEX_MAXWAIT);
}ide
/**
* 設置的超時時間永遠都不會到達
*/
#define SDL_MUTEX_MAXWAIT (~(Uint32)0)函數
/* 等待信號量 */
if (ms == SDL_MUTEX_MAXWAIT) {
retval = SDL_SemWait(cond->wait_sem);
} else {
retval = SDL_SemWaitTimeout(cond->wait_sem, ms);
}線程
int
SDL_SemWait(SDL_sem * sem)
{
return SDL_SemWaitTimeout(sem, SDL_MUTEX_MAXWAIT);
}rem
int
SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout)
{
int retval;
DWORD dwMilliseconds;it
if (!sem) {
return SDL_SetError("Passed a NULL sem");
}class
if (timeout == SDL_MUTEX_MAXWAIT) {
dwMilliseconds = INFINITE;
} else {
dwMilliseconds = (DWORD) timeout;
}
switch (WaitForSingleObjectEx(sem->id, dwMilliseconds, FALSE)) {
case WAIT_OBJECT_0:
InterlockedDecrement(&sem->count);
retval = 0;
break;
case WAIT_TIMEOUT:
retval = SDL_MUTEX_TIMEDOUT;
break;
default:
retval = SDL_SetError("WaitForSingleObject() failed");
break;
}
return retval;
}變量
最終調用了Windows的信號量函數,這個函數跟Sleep函數在線程等待過程當中,是否有優點??sed