boost c ++库:sleep_for等待(几乎)两次

时间:2013-05-22 13:59:46

标签: c++ boost boost-thread

我正在使用Boost C ++库,但我对`sleep_for`函数有一些问题:它需要很长时间!如果我想睡一个线程仅1秒钟,它会让线程睡2秒!

我在Windows 7(x64)上使用msvc 2010作为编译器。这些库是在x86 istruction集中编译的。 我的应用程序有大约5个线程,我不希望替换(如果可能)使用Sleep调用,因为我正在使用中断点。

我有些al?吗?一世

Som例子:

static const boost::chrono::microseconds timeToSleep( 40000 );

DWORD dwStart = timeGetTime();
boost::this_thread::sleep_for( timeToSleep );
DWORD elapsed = timeGetTime() - dwStart;
BOOST_LOG_TRIVIAL( trace ) << "elapsed: " << elapsed << "ms" << std::endl;

这个打印总是80的双倍

如果我写:

static const boost::chrono::microseconds timeToSleep( 80000 );

简而言之,如果我想要睡眠x,它会睡2次。我已经在调试和发布模式之间切换,但我得到了相同的结果。
我有事吗?这很奇怪

编辑

#define BOOST_TEST_MODULE SLEEP_FOR_TEST_SUIT
#include <boost/test/unit_test.hpp>
#include <boost/log/trivial.hpp>
#include <boost/thread.hpp>

#include <Windows.h>
#include <MMSystem.h>
#pragma comment( lib, "Winmm.lib" )

using namespace boost;


BOOST_AUTO_TEST_CASE( sleep_test )
{
    for ( int i = 0; i < 1000000; i += 10000 )
    {
        chrono::microseconds toSleep( i );
        DWORD dwStart = timeGetTime();
        this_thread::sleep_for( toSleep );
        BOOST_LOG_TRIVIAL( info )
            << "this_thread::sleep_for( chrono::microseconds( " << i / 1000 << " ) has slept: "
            << timeGetTime() - dwStart << "ms";
    }
}

这总是睡两次

1 个答案:

答案 0 :(得分:2)

如果使用boost 1.53,那么它是boost bug。解决方案是修补增强源,等待新版本或回滚到之前的增强版本。