我正在使用 Boost C++ 库,但 `sleep_for` 函数存在一些问题:它需要很长时间!!!如果我只想让一个线程休眠 1 秒,它会让线程休眠 2 秒!!!
我在 Windows 7 (x64) 上使用 msvc 2010 作为编译器。这些库是在 x86 指令集中编译的。我的应用程序有大约 5 个线程,我不想用 Sleep 调用替换(如果可能的话),因为我正在使用中断点。
我有一些替代品吗?我
一些例子:
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";
}
}
这总是睡两次