使用visual c ++ 2010 express和WinXP运行以下代码时,'for循环'始终执行 如下:
读31000行25000行,62ms读25000行,46ms读25000行,62ms读25000行,46ms读25000行,46ms读25000行
然而,当我在Windows 7 Home Edition上使用visual c ++ 2010 express进行编译时,for循环执行如下:
在62ms读取25000行,在530ms读取25000行,在514ms读取25000行,在514ms读取25000行,在514ms读取25000行,在530ms读取25000行
我正在试图弄清楚为什么'for loop'在Windows 7上第一次运行msecs,然后为后续运行跳转到10 x t msecs。而在XP上,它一直运行t msecs。它可能是Windows 7构建/设置特有的东西或代码中的基础。
我最近开始编写C ++编程,非常感谢帮助您解决Windows 7环境中的问题。
#include <iostream>
#include <string>
#include <vector>
#include "Elapsed.h"
using namespace std;
void readfile(){
Elapsed time1;
vector<string> lines;
lines.reserve(50000);
string s = "this is a string this is a longer string ";
for(int i = 0; i<25000; i++) lines.push_back(s);
cout<<"Read "<<lines.size()<<" lines in "<<time1().total_milliseconds()<<"ms\n";
}
int main(){
readfile();
readfile();
readfile();
readfile();
readfile();
readfile();
system("PAUSE");
}
#include <boost/date_time.hpp>
// Purpose: track elapsed time from constructor or reset
class Elapsed {
boost::posix_time::ptime m_when;
public:
static boost::posix_time::ptime now(){return boost::posix_time::microsec_clock::universal_time();}
Elapsed(): m_when( now() )
{
} // end constructor
void reset() { m_when = now(); }
boost::posix_time::time_duration operator()() const {
return now() - m_when;
} //end operator()
};// end class
答案 0 :(得分:1)
你应该像这样计算你的时间:
boost::posix_time::time_duration span = time1();
cout << "Read " << lines.size() << " lines in "<<
span.total_milliseconds() << "ms\n";
请注意,operator<<
不包含序列点,因此您可以在计时器中包含一些输出到cout
,并且IO时序可能非常不可预测。