如果对精度不是很高可以用boost 来实现之
第一种方法:
void fun()
{
boost::progress_timer t;
//do some thing
//....
}
执行这个函数后 它会输出执行时间. 以秒为单位小数点后两位. eg: 10.46 s
如果你需要重定位到其它地方,而不是标准输出设备. 你可以这样:
stringstream ss;
boost::progress_timer t(ss);
因为它的构造函数是这样的:
explicit progress_timer( std::ostream & os = std::cout )
第二种方法:
void fun()
{
boost::timer t;
//do some thing
cout<<t.elapsed()<<endl;
}
以上方法均涉及到一个精度的问题秒后两位.如果我想更精确一些. 必须做一个扩展.
第三种方法(类似于第一种扩展精度):
template<int N = 2>
class new_progress_timer : public boost::timer ,private boost::noncopyable
{
public:
new_progress_timer(std::ostream & os = std::cout):m_os(os)
{
BOOST_STATIC_ASSERT(N >0 && N<= 10);
}
~new_progress_timer()
{
try
{
std::istream::fmtflags old_flags = m_os.setf(std::istream::fixed,std::istream::floatfield);
std::streamsize old_prec = m_os.precision(N);
m_os<<elapsed()<<" s\n"<<std::endl;
m_os.flags(old_flags);
m_os.precision(old_prec);
}
catch(...)
{
;
}
}
private:
std::ostream & m_os;
};
template<>
class new_progress_timer<2>:public boost::progress_timer
{
;
};
第四种: 用Poco
void test4()
{
Poco::Stopwatch sw;
sw.start();
// do some thing
....
sw.stop();
cout<<sw.elapsed()<<endl;
}