С++ 11 таймер! действительно ладан

C++

С++ 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====