Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用boost来实时跟踪而不是用户+;系统?_C++_Multithreading_Boost_Timer - Fatal编程技术网

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版本来说是不存在的。看起来你链接的问题有我可以用的-谢谢!