Всегда ли цикл while полностью загружает ЦП?

Мне нужно создать игровой цикл на стороне сервера, проблема в том, как ограничить использование ЦП цикла.

По моему опыту программирования, цикл занятости всегда требует максимальной загрузки ЦП. Но я читаю код SDL (Simple DirectMedia Layer), у него есть функция SDL_Delay (UINT32 мс) , и у него есть цикл while, требуется ли максимальное использование процессора, если нет, то почему?

https://github.com/eddieringle/SDL/blob/master/src/timer/unix/SDL_systimer.c#L137-158

do {
    errno = 0;

#if HAVE_NANOSLEEP
    tv.tv_sec = elapsed.tv_sec;
    tv.tv_nsec = elapsed.tv_nsec;
    was_error = nanosleep(&tv, &elapsed);
#else
    /* Calculate the time interval left (in case of interrupt) */
    now = SDL_GetTicks();
    elapsed = (now - then);
    then = now;
    if (elapsed >= ms) {
        break;
    }
    ms -= elapsed;
    tv.tv_sec = ms / 1000;
    tv.tv_usec = (ms % 1000) * 1000;

    was_error = select(0, NULL, NULL, NULL, &tv);
#endif /* HAVE_NANOSLEEP */
} while (was_error && (errno == EINTR));

6
задан guilin 桂林 1 January 2012 в 08:31
поделиться