c cpu 中的 time.h 库是否密集?
Is the time.h library in c cpu intensive?
我用 c 编写了这个简短的程序,但每当我 运行 它时,我的电脑的风扇开始旋转得非常快。我是以错误的方式做某事还是时间库只是 cpu 以某种方式密集?这是代码:
#include <stdio.h>
#include <time.h>
void delay(int seconds){
int clocks_to_wait = seconds * CLOCKS_PER_SEC;
clock_t time = clock();
while(clock() < time + clocks_to_wait){
}
}
int main(){
while(1){
printf("\r");
printf("-");
delay(1);
printf("\r");
printf("\");
delay(1);
printf("\r");
printf("|");
delay(1);
printf("\r");
printf("/");
delay(1);
printf("\r");
printf("-");
delay(1);
}
return 0;
}
我猜是空的 while 循环让处理器变热了吗?我说的对吗?
编辑:问题已解决,来源:
是的,像这样一个空的 while 循环只会用掉 100% 的 CPU 时间——忙等待直到时间赶上你想要等待的时间。
如果你想等待而不燃烧CPU时间(浪费电池加热东西和运行风扇),你需要使用OS 不使用 CPU 等待的延迟。在 Posix(Linux、OSX、UNIX 等)系统上,即休眠指定秒数的 sleep
,或 nanosleep
休眠 timespec
的调用,指定以纳秒为单位的延迟。
在您的情况下,只需将 delay(1);
调用替换为 sleep(1);
我用 c 编写了这个简短的程序,但每当我 运行 它时,我的电脑的风扇开始旋转得非常快。我是以错误的方式做某事还是时间库只是 cpu 以某种方式密集?这是代码:
#include <stdio.h>
#include <time.h>
void delay(int seconds){
int clocks_to_wait = seconds * CLOCKS_PER_SEC;
clock_t time = clock();
while(clock() < time + clocks_to_wait){
}
}
int main(){
while(1){
printf("\r");
printf("-");
delay(1);
printf("\r");
printf("\");
delay(1);
printf("\r");
printf("|");
delay(1);
printf("\r");
printf("/");
delay(1);
printf("\r");
printf("-");
delay(1);
}
return 0;
}
我猜是空的 while 循环让处理器变热了吗?我说的对吗?
编辑:问题已解决,来源:
是的,像这样一个空的 while 循环只会用掉 100% 的 CPU 时间——忙等待直到时间赶上你想要等待的时间。
如果你想等待而不燃烧CPU时间(浪费电池加热东西和运行风扇),你需要使用OS 不使用 CPU 等待的延迟。在 Posix(Linux、OSX、UNIX 等)系统上,即休眠指定秒数的 sleep
,或 nanosleep
休眠 timespec
的调用,指定以纳秒为单位的延迟。
在您的情况下,只需将 delay(1);
调用替换为 sleep(1);