С++ 11 таймер! действительно ладан
Введение
В процессе написания программ нам иногда нужно проверить время выполнения операторов нашей программы.В настоящее время существует множество библиотек, которые мы могли бы использовать, и не было доступной хорошей кросс-платформенной библиотеки; и, как правило, это вид кода. Его также выполняют наши программисты, вызывая системную библиотеку, но часто возникают такие проблемы, как недостаточная точность и отсутствие кроссплатформенной поддержки;
Он здесь. . . он пришел. . , он пришел на разноцветных благоприятных облаках; «он» — это тот, что в boost появился в C++11chronoбиблиотека, позволяющая реализовать высокоточные часы, достигающие наносекундного уровня;
Во-вторых, хронобиблиотека
В C++11 заголовки, связанные со временем, в стандартной библиотеке шаблонов. Все функции и шаблоны классов в этом заголовочном файле определены вstd::chrono
в пространстве имен;
Здесь в основном две точки времени и часы:
Общий таймер запускается с определенного момента времени, а затем ведет отсчет между определенным моментом времени, что мы обычно называем отнимающим время;
Время:
template <class Clock, class Duration = typename Clock::duration>
class time_point;
std::chrono::time_point представляет конкретное время
Первый параметр шаблона Clock используется для указания используемых часов.В стандартной библиотеке есть три вида часов, а именно:
- system_clock: часы календаря реального времени (настенные часы) текущей системной области (то есть согласованные для каждого процесса).
- устойчивые_часы: Стабильные по размерам часы, реализованные текущей системой, в которой каждый тик времени однороден (т. е. имеет одинаковую длину).
- high_resolution_clock: часы с высоким разрешением, реализованные в текущей системе.
Второй параметр функции шаблона используется для представления единицы измерения времени (специализированный std::chrono::duration ).
Точки времени имеют отметку времени, источник времени. Библиотека chrono использует временную метку Unix 1 января 1970 г., 00:00. Таким образом, time_point также является промежутком времени (длительностью) от метки времени (эпохи).
3. Практика
Зная это, реализуем упомянутый в начале высокоточный таймер:
#ifndef _TimerClock_hpp_
#define _TimerClock_hpp_
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
class TimerClock
{
public:
TimerClock()
{
update();
}
~TimerClock()
{
}
void update()
{
_start = high_resolution_clock::now();
}
//获取秒
double getTimerSecond()
{
return getTimerMicroSec() * 0.000001;
}
//获取毫秒
double getTimerMilliSec()
{
return getTimerMicroSec()*0.001;
}
//获取微妙
long long getTimerMicroSec()
{
//当前时钟减去开始时钟的count
return duration_cast<microseconds>(high_resolution_clock::now() - _start).count();
}
private:
time_point<high_resolution_clock>_start;
};
#endif
контрольная работа:
#include "TimerClock.hpp"
int main()
{
TimerClock TC;
int sum = 0;
TC.update();
for (int i = 0; i > 100000; i++)
{
sum++;
}
cout << "cost time:" << TC.getTimerMilliSec() <<"ms"<< endl;
cout << "cost time:" << TC.getTimerMicroSec() << "us" << endl;
return 0;
}
результат:
Подобно этому относительно высокоточному тесту, мы можем использовать его в коде нашего проекта, мы можем рассчитать время работы нашей программы и мы можем ее оптимизировать;
Чтобы узнать больше о фоновых серверах C++, выполните следующие действия: Публичный аккаунт WeChat: ====Разработка фонового сервера CPP====