我正在尝试为时间测量创建一个简单的类,其中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/d
与a - ( b + c/d )
不同。正如您对@PaulMcKenzie的评论所建议的那样,将其更改为tim.tv_sec+(tim.tv_usec/1000000.0) - timeTmp
可获得更有意义的结果。