如何在C ++中使用chrono计时方法执行的时间?

问题描述 投票:-1回答:2

因此,这是我第一次尝试进行性能评估,并且在尝试将其用于课程之前,已经跟随一些在线资源来测试较小版本的代码。不幸的是,我无法打印出完成该功能所花费的时间,而且我不确定自己是否做对了。

#include <string>
#include <iostream>
#include <unordered_map>
#include <chrono>

using namespace std;

class Timer {
public:
   Timer() {
       startTimept = std::chrono::high_resolution_clock::now();
   }

   ~Timer() {
       Timer Stop();
   }

   void Stop() {
       auto endTimept = std::chrono::high_resolution_clock::now();

       auto start = std::chrono::time_point_cast<std::chrono::microseconds>(startTimept).time_since_epoch().count();
       auto end = std::chrono::time_point_cast<std::chrono::microseconds>(endTimept).time_since_epoch().count();

       auto duration = end - start;
       double ms = duration * 0.001;

       std::cout << duration << "us (" << ms << "ms)";

   }
private:
   std::chrono::time_point<std::chrono::high_resolution_clock> startTimept;
};

int main()
{
   std::unordered_map<std::string, std::string>::iterator found, start, nFound;

//ADDS PAIRS OF SENTENCE INTO A MAP
   std::unordered_map<std::string, std::string> sortMap =
   { { "these", "pairs" }, { "the", "correct" }, { "pairs", "makes" }, { "correct", "sentence" }, { "makes", "the" } };
   std::unordered_map<std::string, std::string> swapMap =
   { { "pairs","these" }, {"correct", "the"}, { "makes", "pairs" }, {"sentence", "correct" }, {"the",  "makes"} };

//CREATES CONTAINER TO STORE COMPLETE SENTENCE
   std::list<std::string> resultSeq;

   start = sortMap.begin();

//ADD STARTING WORDS INTO THE LIST
   resultSeq.push_back(start->first);
   resultSeq.push_back(start->second);

//TEMP POINTER TO SOUGHT WORD
   found = sortMap.find(start->second);

//THIS IS THE FUNCTION I AM TRYING TO TEST
   {
       Timer timer();
       for (auto it = sortMap.begin(); it != sortMap.end(); ++it) {
           if (it == found) {
               resultSeq.push_back(it->second);
               found = sortMap.find(it->second);
               it = sortMap.begin();
           }
       }
   }

   for (std::list<std::string>::iterator hard = resultSeq.begin(); hard != resultSeq.end(); ++hard)
   {
       std::cout << (*hard) << std::endl;
   }

   __debugbreak;
}

[如果有人可以发现我在做什么错,或提供任何链接来帮助进行绩效评估,那将非常有帮助!

c++ methods execution chrono
2个回答
0
投票

您应使用std::steady_clock测量时差。 std::steady_clock可以是任何东西,不需要单调。 std::system_clock也是如此。

high_resolution_clock在整个不同的标准库实现,及其使用应为避免。它通常只是std :: chrono :: steady_clock的别名,或者std :: chrono :: system_clock,但取决于库是哪一个或配置。当它是system_clock时,不是单调的(例如,时间可以倒退)。例如,对于gcc的libstdc ++是system_clock,对于MSVC是stable_clock,对于clang的libc ++这取决于配置。

此外,要封装时间测量,可以利用C ++的RAII机制:

std::system_clock

-1
投票

如果是出于快速调试目的,我的个人方法是使用std::high_resolution_clock。由于它比较罗word,我建议为其创建包装函数。无论如何,这只是返回自1970年以来的时间(以毫秒为单位)(不确定)。然后,您只需在函数前加一个,然后在函数后加一个,std::high_resolution_clock差,即可获得函数执行所需的毫秒数。

© www.soinside.com 2019 - 2024. All rights reserved.