Функция clock() из библиотеки time.h. Язык си
Я пишу игру тетрис на языке Си с использованием метода конечных автоматов. В рамках одного из состояний, которое обозначает движение или поворот фигуры, мне нужен таймер, по истечении которого фигура спуститься вниз на 1 клетку игрового поля. Вот так у меня реализована функция проверки времени:
int Timer() {
static clock_t moving_start = 0, moving_end = 0;
int rtrn = 0;
if (moving_start == 0) {
moving_start = moving_end = clock();
} else {
moving_end = clock();
double time_diff =
((double)(moving_end - moving_start)) / CLOCKS_PER_SEC * 1000;
if (time_diff >= 1000) {
rtrn = 1;
moving_start = moving_end = 0;
}
}
return rtrn;
}
Она возвращает 1, если прошло 1000мс с момента ее первого вызова после обнуления значений moving_start и moving_end.
Если функцию тестировать отдельно от всей программы, то она работает вроде как корректно - действительно отсчитывает +- 1000мс. Но если между вызовами таймера добавлять printf-ы (мой тетрис имеет консольный интерфейс), то все ломается. Функция как-будто бы начинает считать намного медленнее. Если добавить внутрь функции для отладки вот такую строчку:
printf("time_diff = %lf\n", time_diff);
То значение переменной time_diff дойдет до 1000 не за одну секунду, как в варианте без printf-a, а раз в 10+ дольше.
В чем может быть проблема? Почему printf-ы так тормозят clock()?