Аппаратный таймер на C в Windows

Как реализовать аппаратный таймер на ОС Windows. Мне нужно измерять вычисления в миллисекундах и наносекундах.

for (i=0;i<1024;i++){
  //start timer
  //computations
  //end timer
  //printf result(end - start)
}

person misolo89    schedule 22.10.2018    source источник
comment
Используйте getrusage(), см. мой ответ stackoverflow. com/questions/52869470/set-time-t-to-miliseconds/   -  person manoliar    schedule 22.10.2018
comment
Я не думаю, что вы сможете измерить точные значения наносекунд на компьютере с Windows.   -  person A.R.C.    schedule 22.10.2018
comment
Универсальная настольная ОС, такая как Windows, не подходит для таких измерений. Для начала вам понадобится бесплатное периферийное устройство с аппаратным таймером и подходящий драйвер для него. Уже одно это испортит наносекундную точность, как и прерывания с более высоким приоритетом.   -  person Martin James    schedule 22.10.2018
comment
Вдобавок к тому, что Windows является пустяком для рабочего стола, вам понадобится очень специализированное оборудование, чтобы получить наносекундную точность. Так что бежать за универсальной оценочной платой MCU тоже не стоит.   -  person Lundin    schedule 22.10.2018
comment
Он сказал Windows. Я был рассеян.!   -  person manoliar    schedule 22.10.2018
comment
получить API для движения мыши. Должно быть миллисекундное ожидание и ответ   -  person DeerSpotter    schedule 22.10.2018


Ответы (1)


Попробуйте использовать QueryPerformanceFrequency. и методы QueryPerformanceCounter. чтобы получить время в субмиллисекундном разрешении:

LARGE_INTEGER cpu_khz, start_time, end_time;  
QueryPerformanceFrequency(&cpu_khz);
for (i=0;i<1024;i++) {
  QueryPerformanceCounter(&start_time); 
  // computations
  QueryPerformanceCounter(&end_time); 
  double delta_time = (start_time.QuadPart-end_time.QuadPart) / (double)cpu_khz.QuadPart;
  printf("took %.3f seconds", delta_time);
}
person gabonator    schedule 22.10.2018