#include "TIMER1.h"
#include "MAIN.h"
typedef unsigned _int64 uint64;
void TASK1()
{
uint64 freq, start, end, diff;
//unsigned int milliseconds;
QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
QueryPerformanceCounter((LARGE_INTEGER*)&start);
// code to measure
printf("hi\n");
printf("hi1\n");
printf("hi2\n");
QueryPerformanceCounter((LARGE_INTEGER*)&end);
diff = (((end - start) * 1000)/freq);
//milliseconds = (unsigned int)(diff & 0xffffffff);
printf("It took %u ms\n",diff);
}
Я вызываю функцию void TASK1() несколько раз из основного и анализируя время, затраченное на печать, как в приведенном выше коде (т.е. hi, hi1, hi2). Я вычисляю разницу во времени между временем начала и временем окончания печати hi, hi1, hi2. Мой вопрос: почему я получаю задержку в выходе и не умею печатать точно так, как ожидалось.Какова максимальная задержка или дрожание при использовании счетчика Queryperformance?
ошибка в выводе: привет hi1 hi2 потребовалось 0ms
привет hi1 Hi2 потребовалось 1ms
иногда на выходе: HI1 hi2 потребовалось 2ms
В чем причина этого? Как изменить приведенный выше код от миллисекунд до микросекунд?
Трудно сказать, однако проблема с QueryPerformanceCounter является то, что его точность может быть подвергнуто деградации на современных процессорах, которые используют функции энергосбережения. Во всяком случае, здесь есть интересный пост: http://stackoverflow.com/questions/7287663/queryperformancecounter-status он может помочь. Находясь на уровне пользователя, вы также должны учитывать задержку между моментом, когда вы получаете время и момент, о котором сообщается вашим приложением. – Jekyll
Не существует максимального дрожания, все зависит от того, какие фоновые задачи выполняются вашей операционной системой в то время. И вам действительно нужна помощь в преобразовании миллисекунд в микросекунды? Вы уже конвертируете от секунд до миллисекунд. –
- это правильный способ преобразования в микросекунды diff = (((end-start) * 1000000)/freq); ?? – user2984410