C++ 如何使用boost来实时跟踪而不是用户+;系统?
我正在使用C++ 如何使用boost来实时跟踪而不是用户+;系统?,c++,multithreading,boost,timer,C++,Multithreading,Boost,Timer,我正在使用boost::timer来计时代码的一部分。如果我用一个线程运行代码: $ time ./runfoo 1 Took 2.08s real 0m2.086s user 0m1.611s sys 0m0.475s 2.08是t.appeased()的输出 但是如果我用4个线程运行代码: $ time ./runfoo 4 Took 2.47s real 0m1.022s user 0m1.834s sys 0m0.628s 它似乎在跟踪用户
boost::timer
来计时代码的一部分。如果我用一个线程运行代码:
$ time ./runfoo 1
Took 2.08s
real 0m2.086s
user 0m1.611s
sys 0m0.475s
2.08
是t.appeased()
的输出
但是如果我用4个线程运行代码:
$ time ./runfoo 4
Took 2.47s
real 0m1.022s
user 0m1.834s
sys 0m0.628s
它似乎在跟踪用户+系统时间,而不是实时
如何使其实时跟踪?我用的是Boost 1.46。更具体地说,计时器位于主线程中,它只调用最终使用多线程的函数
编辑:相关源如下所示:
boost::asio::io_service ios;
boost::thread_group pool;
boost::asio::io_service::work work(ios);
pool.create_thread(boost::bind(&boost::asio::io_service::run, &ioService));
pool.create_thread(boost::bind(&boost::asio::io_service::run, &ioService));
pool.create_thread(boost::bind(&boost::asio::io_service::run, &ioService));
pool.create_thread(boost::bind(&boost::asio::io_service::run, &ioService));
{
boost::timer t;
function_which_posts_to_ios(ios);
printf("Took %.2fs\n", t.elapsed();
}
至于我期望的输出,我希望第二次运行中的程序打印
“take 1.02s”
,而不是“take 2.47s”
,因为1.02s
是实际经过的秒数。似乎您使用的是appead()
的语义在不同平台上不一致,一些设备上的挂钟时间和其他设备上的CPU时间。在中,appeased()
方法返回一个结构,该结构具有不同的real、user和system时间成员
如果不能使用Version2API,可以使用
boost::posix_time
来测量挂钟时间。请参阅。“实时”时间,与返回的一样?是的,标记为“实时”的时间作为时间的输出。您可以将源代码显示给runfoo
?没有它,我们就无法开始评估您可能期望的输出,这些输出对于我正在使用的boost版本来说是不存在的。看起来你链接的问题有我可以用的-谢谢!