В C# Я использую класс Stopwatch
. Я могу получить тики и миллисекунды без проблем.Перемещение с C# на C++, QueryPerformanceCounter против часов создает запутывающие результаты
Теперь, когда я тестирую код во время обучения C++, я пытаюсь получить измерения, но Я не знаю, где результаты совпадают с эквивалентом решения секундомера C#. Я пытался искать, но информация слишком широка, и я не мог найти абсолютное решение.
double PCFreq = 0.0;
__int64 CounterStart = 0;
void StartCounter()
{
LARGE_INTEGER li;
if(!QueryPerformanceFrequency(&li))
std::cout << "QueryPerformanceFrequency failed!\n";
PCFreq = double(li.QuadPart)/1000.0;
QueryPerformanceCounter(&li);
CounterStart = li.QuadPart;
}
double GetCounter()
{
LARGE_INTEGER li;
QueryPerformanceCounter(&li);
return double(li.QuadPart-CounterStart)/PCFreq;
}
Как это дает мне два разных результата, я склонен верить часам. :)
start = StartCounter()
//some function or for loop
end = GetCounter()
marginPc = end - start;
start = clock();
// ...same
end= clock();
marginClck = end - start;
std::cout<< "Res Pc: " << marginPc << "\r\nRes Clck: " marginClck<< std::endl;
С версией часов я пытался как unsigned int
и double
, но результаты все еще были разные.
Каков правильный метод, эквивалентный секундомеру C#?
Заканчивать [C++ кросс-платформенный высокое разрешение таймер] (http://stackoverflow.com/questions/1487695/c-cross-platform-high- разрешение-таймер? lq = 1) –
Вы не должны ожидать, что «некоторая функция или цикл» займет такое же количество времени, если выполняется дважды (например, могут быть кеширование побочных эффектов, что ускоряет второй запуск); поместите оба таймера вокруг него и запустите его один раз, а затем сравните измерения часов. Почему бы вам не пожаловаться на то, что они отличаются друг от друга, не давая никаких измерений, с помощью которых мы можем определить, насколько это важно? Различия в том, сколько микросекунд? И 'QueryPerformanceFrequency' исторически был ненадежной кучей дерьма. Если у вас есть поддержка RDTSCP, вы можете использовать ее напрямую .... –
@TonyD благодарит за комментарий: «Возможно, кеширование побочных эффектов делает второй запуск быстрее», как вы могли бы узнать, когда это возможно/невозможно ? кстати, это была не разница в MS, цифры были совершенно неправильными –