Оценка времени выполнения кода
Весьма полезно иметь возможность оценить время выполнения какого-то фрагмента кода или потока чтобы выполнить оптимизацию.
Для этого необходима библиотека
#include «chrono»
или #include «thread», которая уже включает библиотеку chrono.
Суть измерения – запоминаем «системное» время в начале кода и по его окончанию и высчитываем разницу.
За работу со временем отвечает библиотека chrono.
int main()
{
auto Start=chrono::high_resolution_clock::now(); //старт подсчета времени
for(int i=0;i<10;++i)
{
Sleep(100); //задержка 100мс
}
auto Stop=chrono::high_resolution_clock::now(); //стоп подсчета времени
chrono::duration Delta=Stop-Start; //высчитываем разницу
cout<<"Time code = "<<Delta.count()<<endl; //выводим разницу
return 0;
}
Значение Delta будет немного больше 1с т.к. на вход/выход из цикла и тд тратится время.
Удобно такой подсчет оформить в виде класса:
#define TimeDebug
class TimeCodeCnt
{
public:
TimeCodeCnt()
{
#ifdef TimeDebug
Time_Start=std::chrono::high_resolution_clock::now();
#endif
}
void EndCnt()
{
#ifdef TimeDebug
Time_Stop=std::chrono::high_resolution_clock::now();
std::chrono::duration Delta=Time_Stop-Time_Start; //высчитываем разницу
cout<<"Time code = "<<Delta.count()<<"s"<<endl; //выводим разницу
#endif
}
private:
std::chrono::time_point Time_Start, Time_Stop;
};
Примечание: тип переменной std::chrono::time_point<std::chrono::_V2::system_clock>
взят для windows и QtCreator – в вашей ос и IDE (или другой версии IDE м.б. иной тип переменной)
Пример использования класса:
int main()
{
cout<<"Start code"<<endl;
TimeCodeCnt TimeCode;
for(int i=0;i<10;++i)
{
Sleep(100); //задержка 100мс
}
TimeCode.EndCnt();
cout<<"End code"<<endl;
return 0;
}
Если оценка времени не нужна — комментируем #define TimeDebug