2013-11-10 2 views
0

Перебор QueryPerformanceCounter() и сохранить значение:QueryPerformanceCounter() Тест для Windows Embedded Compact 7

// Main loop for timer test 
for (int i = 0; i < ITERATIONS; i++) // ITERATIONS = 1000 
{ 
    QueryPerformanceCounter(&li); 
    time[i] = double(li.QuadPart)/PCFreq; //1,193,182 per second 
} 
//calculate the difference between each call 
// and save in difference[] 
for (int j = 0; j < (ITERATIONS - 1) ; j++) 
{ 
    difference[j] = time[j+1] - time[j]; 
} 

(. Деление на PCFreq дает время между каждым вызовом)

Высокое разрешение таймера/счетчика предположительно работает, потому что он не возвращает стандартную частоту 1000.

Среднее значение 11.990884 микросекунд между каждой отметкой времени (тысячи звонков с отметками времени).

Это кажется очень медленным.

Является ли этот тест испорченным?

или идеи относительно того, почему его сообщения такие медленные значения на Celeron 1.1Ghz?

+1

Почему вы не используете QueryPerformanceFrequency для проверки зарегистрированной частоты? И что именно вы пытаетесь проверить здесь? Похоже, вы просто определяете время, необходимое для запроса счетчика, а затем выполните некоторую математику. – ctacke

+0

@ctacke: Я использую (не показано) для получения PCFreq; // 1,193,182 в секунду. Да, меня интересует, как долго вызов QueryPerformanceCounter - так что я могу точно измерить другие вещи. (+1). –

+0

@ctacke: не 12 микросекунд очень долго? –

ответ

2

Возможно, целесообразно исключить математику с плавающей запятой в первом цикле, чтобы сохранить эту (потенциальную) разницу между Win 7 Desktop и Embedded Compact 7 из соображений. Итак, что-то вроде:

LARGE_INTEGER counter[ITERATIONS]; 
// Main loop for timer test 
for (int i = 0; i < ITERATIONS; i++) // ITERATIONS = 1000 
{ 
    QueryPerformanceCounter(&counter[i]); 
} 
time[0] = double(counter[0].QuadPart)/PCFreq; //1,193,182 per second 
//calculate the difference between each call 
// and save in difference[] 
for (int j = 0; j < (ITERATIONS - 1) ; j++) 
{ 
    time[j+1] = double(counter[j+1].QuadPart)/PCFreq; //1,193,182 per second 
    difference[j] = time[j+1] - time[j]; 
} 
Смежные вопросы