Есть ли лучшая функция или способ измерения времени, чем функция clock()
в Windows? У меня короткая операция, и когда я пытаюсь clock()
или gettickcount()
, он говорит, что это заняло 0,0 секунды. Мне нужен способ измерить его миллисекундами или наносекундами.
Измерьте время выполнения в C (в Windows)
Ответы (2)
Вы можете использовать QueryPerformanceCounter
и QueryPerformanceFrequency
:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main(void)
{
LARGE_INTEGER frequency;
LARGE_INTEGER start;
LARGE_INTEGER end;
double interval;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&start);
// code to be measured
QueryPerformanceCounter(&end);
interval = (double) (end.QuadPart - start.QuadPart) / frequency.QuadPart;
printf("%f\n", interval);
return 0;
}
person
masoud
schedule
30.03.2013
Спасибо. Вы очень помогли.
- person Bar; 30.03.2013
Это работало с кодом последовательного поиска. Но это дает программе остановку работы с ошибкой, когда я использую ее с кодом двоичного поиска. В чем может быть проблема?
- person Bar; 30.03.2013
Приведенный выше код проверен, если у вас есть проблема, она где-то еще. Отладьте свой двоичный поиск... или задайте свою проблему как новый вопрос StackOverflow.
- person masoud; 30.03.2013
interval
должно быть в секундах (согласно этому ответу и документация QueryPerformanceFrequency
)
- person pcworld; 02.12.2016
Обратите внимание, что частота может быть равна 0, если аппаратное обеспечение не поддерживает ее. Так что, вероятно, лучше добавить проверку, что это не 0,
- person Tal Jerome; 20.04.2020
В MSVC я понимаю, что
clock()
дает время стены, а не время выполнения. Я попробовал этот метод QPC в надежде получить стабильные тайминги (для профилирования), но, к сожалению, измеренное время здесь тоже различается. Это для периодов в 1 секунду или более и для операций, которые абсолютно одинаковы при каждом запуске, поэтому он не может измерять время выполнения. Так что мне еще предстоит сделать несколько заездов и зафиксировать кратчайшее время.
- person Weather Vane; 08.08.2020
Вы можете использовать QueryPerformanceCounter в сочетании с QueryPerformanceFrequency чтобы получить наносекундную точность.
person
Community
schedule
30.03.2013