关于Windows Sleep() 函数的问题

问题遇到的现象和发生背景:

我想调用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,但是这个问题本身出在什么地方就不知道了。
希望有人能解答

time_t ttt0 = chrono::duration_castchrono::microseconds(chrono::system_clock::now().time_since_epoch()).count();
this_thread::sleep_for(chrono::microseconds(sleep_int)); // 这里和调用 ::Sleep() 得到的结果相同 这一行是你需要的,暂时去掉
time_t ddt = chrono::duration_castchrono::microseconds(chrono::system_clock::now().time_since_epoch()).count() - ttt0;
这三行代码,去掉中间一行测试一下直接运算这两个计算结果之间的差值是多少,理论上这个数值是在一定范围内变动,你所需的休眠时间越长,这个数对你的结果影响越小,休眠时间越短,影响越大,出现两倍的原因应该刚好是你所需的这行执行时间与去掉这行的执行时间大体相同导致的
Windows是一个分时操作系统,CPU给当前进程分配的时间片大小、数量也是影响因素