【发布时间】:2014-01-05 21:13:27
【问题描述】:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void delay(double sec)
{
clock_t start = clock();
while ((clock() - start) / CLOCKS_PER_SEC < sec)
;
}
int main()
{
for (int i = 0; i < 100000; i++) {
printf("%d ", i);
delay(1);
}
return 0;
}
我写了一个延迟函数并用这段代码进行了测试,但是我在标准输出中没有看到任何数字。
然后我像这样更改了 printf() 调用:
printf("%d \n", i);
有趣的是,它奏效了。我也尝试过这样的无延迟功能:
for (int i = 0; i < 100000; i++)
printf("%d ", i);
它也有效。我在这里想念什么?为什么我在运行第一个代码时看不到任何数字?感谢您的帮助:)
【问题讨论】:
-
为什么不用普通的
sleep()函数? -
我可以使用它,但出于好奇我问了这个。
-
@TimCooper 我编辑了代码。这是错误的
-
虽然这不是您的主要观点,但我想指出,忙碌等待非常糟糕,因为它会消耗 CPU 时间 - 至少在多任务操作系统上是这样。
-
@yunusaydin 正如其他人指出的那样,
sleep()。或者操作系统提供的其他东西。这告诉操作系统下次不要接触这个进程,因此不会消耗 CPU 时间。在忙于等待时,进程获得了完全的 CPU 时间,基本上什么都不做。