我正在开发一个操作系统,但无权访问标准库。因此,我无法访问time.h
.
我正在使用以下函数来创建时间延迟。
void delay() {
int c = 1 , d = 1 ;
for ( c = 1; c <= 100000; c++) {
for ( d = 1; d <= 100000; d ++) {
asm("nop");
}
}
}
这会等待大约二十秒;但是,我希望该函数接受一个整数并等待那么多秒。我需要做什么才能实现这一目标?
最佳答案
即使是 1 整秒,对于忙等待来说也太长了许多数量级。您肯定希望 HLT CPU 以节省电量,并在中断处理程序中检测计时器何时到期。
但是,如果您真的想要忙等待,一种可移植的(跨最近的 x86 CPU)使用方式可能是使用 CPUID 来找出 RDTSC 的滴答速度,然后循环 PAUSE/RDTSC 直到您已到达终点时间戳。
不过这确实太可怕了。别忙着等。 x86 CPU 需要 sleep ,以便在有事情要做时可以全速运行,而不仅仅是以其持续的最大时钟速度运行。
关于c - 如何用 C 创建我自己的延迟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39692418/