我正在尝试为时间测量创建一个简单的类,其中strat()将开始测量,而end()将结束它并确定结果。到目前为止,我有:

#include <sys/time.h>
#include <string>
#include <iostream>

using namespace std;

class Time {
public:
    Time() {strTmp.clear();}

    void start(string str) {
        strTmp=str;
        gettimeofday(&tim, NULL);
        timeTmp = tim.tv_sec+(tim.tv_usec/1000000.0);
    }
    void end() {
        gettimeofday(&tim, NULL);
        cout << strTmp << " time: " << timeTmp - tim.tv_sec+(tim.tv_usec/1000000.0) << "s" << endl;
        strTmp.clear();
    }
private:
    double timeTmp;
    string strTmp;
    timeval tim;
};

int main()
{
    Time t;
    t.start("test");
    t.end();
    return 0;
}

不幸的是,测量延迟了1秒。
没有输入字符串,该延迟消失。
有没有办法避免延迟并且仍然有字符串输入?

(我使用带有-std = c++ 11 -O3的g++进行编译)

最佳答案

您需要记住运算符的优先级:

    cout << strTmp << " time: " << timeTmp - tim.tv_sec+(tim.tv_usec/1000000.0) << "s" << endl;

这是从开始时间的总和中减去结束时的整个秒数,而结束时的微秒数a - b + c/da - ( b + c/d )不同。正如您对@PaulMcKenzie的评论所建议的那样,将其更改为tim.tv_sec+(tim.tv_usec/1000000.0) - timeTmp可获得更有意义的结果。

10-04 20:16