问题遇到的现象和发生背景:
我想调用Windows的Sleep函数,但是实际休眠时间为传入参数的两倍。
有人知道咋回事不
问题相关代码:
if (sleep > 0)
{
const int sleep_int = (int)(sleep * 1000000.0);
time_t ttt0 = chrono::duration_cast<chrono::microseconds>(chrono::system_clock::now().time_since_epoch()).count();
this_thread::sleep_for(chrono::microseconds(sleep_int)); // 这里和调用 ::Sleep() 得到的结果相同
time_t ddt = chrono::duration_cast<chrono::microseconds>(chrono::system_clock::now().time_since_epoch()).count() - ttt0;
printf("sleep_int=%d\nddt=%I64d\n", sleep_int, ddt);
}
运行结果:
运行结过中,ddt 大约为 sleep_int 的两倍
dt=0.019504 count=2
sleep_int=15808
ddt=29065
dt=0.030148 count=3
sleep_int=14284
ddt=28233
dt=0.030710 count=4
sleep_int=14914
ddt=28899
dt=0.030949 count=5
sleep_int=13108
ddt=27947
dt=0.031663 count=6
sleep_int=13926
ddt=27891
dt=0.030904 count=7
sleep_int=15415
ddt=29988
dt=0.031418 count=8
sleep_int=14810
ddt=29431
我的解答思路和尝试过的方法
现在的解决方法是把sleep_int除以2,但是这个问题本身出在什么地方就不知道了。
希望有人能解答