Вечер добрый. Есть программа для эмуляции. Беда в том, что мне нужно ловить тайминг. Но почему-то после выхода из цикла имею очень большое значение ожидания.
#include <iostream>
using namespace std;
#include <time.h>
#include <Windows.h>
double diffclock(clock_t clock1) {
clock_t clock2 = clock();
double diffticks = clock1 - clock2;
double diffms = diffticks / (CLOCKS_PER_SEC / 1000);
return diffms;
}
int main()
{
int wait = 134;
clock_t fullbetween = clock();
for (int i = 0; i < 5; i++) {
Sleep(wait / 5);
cout << wait / 5 << " ";
}
cout << endl << "finish in " << diffclock(fullbetween) << " ms" << endl;
return 0;
}
Имею суммарное время ожидания 134. Мне надо прождать это время / 5 в цикле. Он верно ждёт по 26мс. Но в последнем выводе показывает время всех итераций 170ms+, хотя 26*5=130. В чём может быть проблема ?
У Sleep
есть гранулярность - он будет ждать минимум указанное время, но обычно больше, округляя до приблизительно 16мс кванта. Пять раз поспали - получили 8мс*5 ~= 40мс дополнительного ожидания.
Потому, что у вас внутри цикла производятся вычисления, организовывается вывод на экран, а потом еще и в конце, до вычисления разницы, производится вывод.
Перепишите программу вот так
int main()
{
int wait = 134;
int swait = wait / 5;
clock_t fullbetween = clock();
for (int i = 0; i < 5; i++) {
Sleep(swait);
// cout << wait / 5 << " ";
}
double diff = diffclock(fullbetween);
cout << endl << "finish in " << diff << " ms" << endl;
return 0;
}
и погрешность будет пара миллисекунд
Насколько я понимаю, выполняем :
сравнение i < 5;
ждем 26мс
вывод cout << wait / 5 << " ";
Все это 5 раз.
выводим cout << endl << "finish in "
и выполняем инкремент
вызываем функцию
выполняется тело функции
И к результату 5 * 26
еще нужно добавить (время на п1 и п3) * 5 + время на п4 + время на п6
и время которое может съедать операционная система. И все это с небольшой погрешностью у вас равен 170ms
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
как в bootstrap в выподающем списке скрыть часть option ? есть список
Все привет, хочу сделать сайт чтобы строить график линейной функции через canvas
Добрый вечер проблема следуйщая, при респонсиве слайдера пропадают его картинки