Я пытаюсь преобразовать функцию Windows C ++ в портативную.
Задача функции — получить эталонное время процессора в секундах. Функция Windows использует QueryPerformanceCounter
а также QueryPerformanceFrequency
, которые не являются переносимыми для Mac, поэтому я попытался использовать std::chrono::high_resolution_clock
, но я не понимаю, как это работает.
У меня уже есть следующая функция:
double GetSeconds(void)
{
double sec;
LARGE_INTEGER Frequency, PerformanceCount;
QueryPerformanceFrequency( &Frequency );
QueryPerformanceCounter( &PerformanceCount );
sec = (double)PerformanceCount.QuadPart /(double)Frequency.QuadPart;
return(sec);
}
С high_resolution_clock
У меня работает следующий код (он возвращает время, которое занимает печать «Hello World»):
std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
std::cout << "Hello World\n";
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
float a = std::chrono::duration_cast<std::chrono::seconds>(end - start).count();
Но я не понимаю, почему не работает следующая строка (я просто хочу получить начальный момент времени):
float a = std::chrono::duration_cast<std::chrono::seconds>(start).count();
Спасибо за помощь
Так как start
не является продолжительность, это момент времени. Также обратите внимание, что std::chrono::steady_clock
не имеет отношения к настенным часам, поэтому получение их текущего значения само по себе не очень много говорит вам, это просто счетчик, который постоянно считает.
Других решений пока нет …