gpt4 book ai didi

c - C语言实现延时功能

转载 作者:太空狗 更新时间:2023-10-29 16:06:25 31 4
gpt4 key购买 nike

我想使用空循环实现延迟功能。但是完成一次循环所需的时间取决于编译器和机器。我希望我的程序自行确定时间并将程序延迟指定的时间量。谁能告诉我该怎么做?N. B. 有一个名为 delay() 的函数可以将系统挂起指定的毫秒数。不使用该功能是否可以挂起系统?

最佳答案

首先,您不应该永远坐在一个循环中什么都不做。它不仅浪费能源(因为它让你的 CPU 100% 忙于计算你的循环计数器)——在多任务系统中,它还会降低整个系统的性能,因为你的进程正在获取所有的时间片看起来正在做某事的时间。

下一点是……我不知道有任何delay() 函数。这不是标准的 C。事实上,在 C11 之前,根本没有针对此类事情的标准。

救援 POSIX,有 usleep(3) (已弃用)和 nanosleep(2) .如果您使用的是符合 POSIX 标准的系统,那么这些都没有问题。它们阻塞(意味着,您的操作系统的调度程序知道它们无事可做,并且仅在调用结束后才调度它们),因此您不会浪费 CPU 能力。

如果您在 Windows 上,对于代码的直接延迟,您只有 Sleep() .请注意,此函数需要几毫秒,但通常只有 15 毫秒左右的精度。通常足够好,但并非总是如此。如果你需要更好的 Windows 精度,你可以使用 timeBeginPeriod() 请求更多的定时器中断。 ... timeBeginPeriod(1); 将每毫秒请求一次定时器中断。不要忘记调用timeEndPeriod()一旦您不再需要精度,就使用相同的值,因为更多的定时器中断是有代价的:它们使系统保持忙碌,从而浪费更多的能量。

我最近在开发一个小游戏时遇到了类似的问题,我需要以 10 毫秒为间隔不断地滴答,这就是我想出的 for POSIX-compliant systemsfor windows .此代码中的 ticker_wait() 函数只是挂起直到下一次报价,如果您的初衷是一些时间问题,这可能会有所帮助。

关于c - C语言实现延时功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548460/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com