c ++ 11 — получить переполнение стека времени

Я пытаюсь преобразовать функцию 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();

Спасибо за помощь

1

Решение

Так как start не является продолжительность, это момент времени. Также обратите внимание, что std::chrono::steady_clock не имеет отношения к настенным часам, поэтому получение их текущего значения само по себе не очень много говорит вам, это просто счетчик, который постоянно считает.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]