Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 时间逼近算法?_C_Algorithm_Time_Sleep - Fatal编程技术网

C 时间逼近算法?

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;

有人能告诉我如何为目标时间创建一个接近算法吗;有睡眠(x),其中x最初很大,随着目标时间的接近而减小?

这取决于您的限制,但一个简单的解决方案是总是将剩余时间除以2,然后再睡眠该时间。它具有对数复杂性,这很好

操作系统通常只保证10毫秒的粒度,因此当时间低于20毫秒时停止睡眠。

无效睡眠(无符号长嚎叫,无符号递减)
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,在循环中使用最小的正延时,直到你期望超出标记。。。这将是唯一两个有意义的选择。谁在乎你叫睡眠多少次?