C 时间逼近算法?
有人能告诉我如何为目标时间创建一个接近算法吗;有睡眠(x),其中x最初很大,随着目标时间的接近而减小?这取决于您的限制,但一个简单的解决方案是总是将剩余时间除以2,然后再睡眠该时间。它具有对数复杂性,这很好 操作系统通常只保证10毫秒的粒度,因此当时间低于20毫秒时停止睡眠。C 时间逼近算法?,c,algorithm,time,sleep,C,Algorithm,Time,Sleep,有人能告诉我如何为目标时间创建一个接近算法吗;有睡眠(x),其中x最初很大,随着目标时间的接近而减小?这取决于您的限制,但一个简单的解决方案是总是将剩余时间除以2,然后再睡眠该时间。它具有对数复杂性,这很好 操作系统通常只保证10毫秒的粒度,因此当时间低于20毫秒时停止睡眠。无效睡眠(无符号长嚎叫,无符号递减) void sleep(unsigned long howLong, unsigned decrement) { if (howLong == 0) return;
无效睡眠(无符号长嚎叫,无符号递减)
void sleep(unsigned long howLong, unsigned decrement)
{
if (howLong == 0)
return;
if (decrement < 2)
{
Sleep(howLong);
return;
}
unsigned long delay = howLong / decrement;
while (delay)
{
Sleep(delay);
delay /= decrement;
}
}
{
如果(howLong==0)
返回;
如果(减量<2)
{
睡眠(长时间);
返回;
}
无符号长延迟=嚎叫/减量;
同时(延迟)
{
睡眠(延迟);
延迟/=减量;
}
}
请您澄清一下您的意思好吗?你的意思是你有一个循环,在每次迭代中调用sleep()
,你希望它在每次迭代中使用不同的值吗?仅仅休眠到目标时间如何不满足你的要求?@Keith Thompson:sleep不能保证精确返回指定的时间,我想他是想从中获得更精确的信息。它看起来像是(a)调用sleep(x)一次,用x=总时间,或者(b)调用sleep,在循环中使用最小的正延时,直到你期望超出标记。。。这将是唯一两个有意义的选择。谁在乎你叫睡眠多少次?