Функция 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()?


Ответы (0 шт):