Мне нужно создать игровой цикл на стороне сервера, проблема в том, как ограничить использование ЦП цикла.
По моему опыту программирования, цикл занятости всегда требует максимальной загрузки ЦП. Но я читаю код 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));