boost chrono endTime-startTime在boost 1.51中返回负值
boost chrono endTime - startTime returns negative in boost 1.51
当我减去endTime-startTime时,macbook pro上的boost chrono库vs1.51返回负时间。如果打印时间点,您会看到结束时间早于开始时间。这怎么会发生?
typedef boost::chrono::steady_clock clock_t;
clock_t clock;
// Start time measurement
boost::chrono::time_point<clock_t> startTime = clock.now();
short test_times = 7;
// Spend some time...
for ( int i=0; i<test_times; ++i )
{
xnodeptr spResultDoc=parser.parse(inputSrc);
xstring sXmlResult = spResultDoc->str();
const char16_t* szDbg = sXmlResult.c_str();
BOOST_CHECK(spResultDoc->getNodeType()==xnode::DOCUMENT_NODE && sXmlResult == sXml);
}
// Stop time measurement
boost::chrono::time_point<clock_t> endTime = clock.now();
clock_t::duration elapsed( endTime - startTime);
std::cout << std::endl;
std::cout << "Now time: " << clock.now() << std::endl;
std::cout << "Start time: " << startTime << std::endl;
std::cout << "End time: " << endTime << std::endl;
std::cout << std::endl << "Total Parse time: " << elapsed << std::endl;
std::cout << "Avarage Parse time per iteration: " << (boost::chrono::duration_cast<boost::chrono::milliseconds>(elapsed) / test_times) << std::endl;
我试过不同的时钟,但没有区别。
任何帮助都将不胜感激!
编辑:忘记添加输出:
现在时间:启动后1纳秒
启动时间:启动后140734799802912纳秒
结束时间:自启动以来140734799802480纳秒
总解析时间:-432纳秒每次迭代的可用分析时间:0毫秒
超线程或只是调度干扰,Boost实现对OS:的单调支持
POSIX:clock_gettime (CLOCK_MONOTONIC)
,尽管它仍然可能由于在校准系统时处理超线程的内核错误而失败。
WIN32:QueryPerformanceCounter()
,除了Nehalem体系结构或更新版本之外,它在内核和线程之间不会是单调的。
OSX:mach_absolute_time()
,即稳定的&高分辨率时钟是相同的。源代码表明它使用RDTSC
,因此严格依赖于硬件稳定性:即没有保证。
禁用超线程是一种推荐的方法,但在Windows上你确实受到了限制。除了丢弃定时器分辨率之外,唯一可用的方法是直接访问底层硬件定时器,同时确保线程相关性。
这看起来是向Boost提交bug的好时机,我建议:
Win32:使用GetTick64Count()
,如本文所述。
OSX:根据这个问题使用clock_get_time (SYSTEM_CLOCK)
。
相关文章:
- 创建一个函数的 Python 绑定,返回指向带有 boost 的向量的指针
- boost::p ython:PyErr_Fetch始终返回 NULL 回溯
- 为什么 boost::locale::to_title 不返回预期的输出?
- 简单的boost ASIO https不返回正文
- C++ ReadDirectoryChangesW 和 Boost 将目录更改作为文件(旧名称)返回
- 清除 std::map 的 boost::p ool_分配器不会在 VS2017 中返回整个池
- boost::asio::async_read 在命名管道上不断返回 EOF
- boost::create_directory 在发布模式下返回异常
- boost::enable_if on 成员函数,重载返回类型
- Boost.Python 返回引用现有 c++ 对象的 python 对象
- 使用BOOST :: PYTHON返回裸露的类对象列表,这些对象是不可复制的
- Boost Statechart:返回以前的状态
- -std=c++0x 导致在 boost 1.64 的情况下返回对临时的引用
- boost::future .then() 继续返回 boost::future
- boost::asio http 服务器无法向 Postman 返回有效响应
- 是由BOOST ::返回的函子,仅使用绑定的参数绑定,等效于不采用参数的函数
- 如何返回包含 PyObject* 的 boost::p ython::元组?
- boost::iostreams 解压缩返回一个空流
- boost-python 当C++方法返回 std::map<string,X*>
- Boost::ASIO:如何从io_service中获取返回值