在标准 C (C99) 中,您可以使用time()
为此,请执行以下操作:
#include <time.h>
:
void waitFor (unsigned int secs) {
unsigned int retTime = time(0) + secs; // Get finishing time.
while (time(0) < retTime); // Loop until it arrives.
}
顺便说一句,这假设time()
返回 1 秒分辨率值。我认为标准没有强制要求,因此您可能需要进行调整。
为了澄清,这是only我知道使用 ISO C99 来做到这一点(问题的标记只不过是“C”,这通常意味着可移植的解决方案是可取的,尽管当然,仍然可能会给出特定于供应商的解决方案)。
无论如何,如果您使用的平台提供了更有效的方式,use it.正如一些评论所指出的,像这样的紧密循环可能会出现关于 CPU 使用率和电池寿命的特定问题。
任何像样的时间切片操作系统都能够降低连续使用其完整时间片的任务的动态优先级,但电池电量可能会出现更多问题。
然而C指定nothing关于托管环境中的操作系统详细信息,这个答案仅适用于 ISO C 和 ISO C(因此不使用sleep
, select
、Win32 API 调用或类似的东西)。
请记住POSIX sleep http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html可以被信号中断。如果你are要走这条路,你需要做类似的事情:
int finishing = 0; // set finishing in signal handler
// if you want to really stop.
void sleepWrapper (unsigned int secs) {
unsigned int left = secs;
while ((left > 0) && (!finishing)) // Don't continue if signal has
left = sleep (left); // indicated exit needed.
}