在C ++ / CLI中计算时间

时间:2015-02-08 18:08:42

标签: c++ timer c++-cli

我有app,我必须计算执行部分C ++函数和ASM函数的时间。实际上我有问题,我得到的时间很奇怪 - 0或大约15600.经常发生。有时,执行后,时间看起来很好,值不同于0和~15600。有谁知道它为什么会发生?以及如何解决它? 计算执行我的C ++应用程序的时间片段:

auto start = chrono::system_clock::now();
for (int i = 0; i < nThreads; i++)
    xThread[i]->Start(i);
for (int i = 0; i < nThreads; i++)
    xThread[i]->Join();
auto elapsed = chrono::system_clock::now() - start;
long long milliseconds = chrono::duration_cast<std::chrono::microseconds>(elapsed).count();
cppTimer = milliseconds;

2 个答案:

答案 0 :(得分:2)

您所看到的是计时器的分辨率。显然,chrono::system_clock在您的系统上每1/64秒或15,625微秒滴答一次。

由于您使用的是C ++ / CLI并且可以使用.Net库,因此我将切换到使用Stopwatch类。它通常具有比1/64秒更高的分辨率。

答案 1 :(得分:0)

对我来说很好看。除了转换为std::chrono::microseconds并将其命名为milliseconds

我使用了几个月的片段是:

class benchmark {

private:
    typedef std::chrono::high_resolution_clock clock;
    typedef std::chrono::milliseconds milliseconds;

    clock::time_point start;

public:
    benchmark(bool startCounting = true) {
        if(startCounting)
            start = clock::now();
    }

    void reset() {
        start = clock::now();
    }

    // in milliseconds
    double elapsed() {
        milliseconds ms = std::chrono::duration_cast<milliseconds>(clock::now() - start);
        double elapsed_secs = ms.count() / 1000.0;
        return elapsed_secs;
    }
};



// usage
benchmark b;
...
cout << "took " << b.elapsed() << " ms" << endl;