我想知道如何在不使用 while 循环的情况下使用 C 来延迟几秒钟。我得到的样本正在使用 while 循环。这可行,但我不想使用 while 循环。请帮忙
while(clock() < endwaitTime)
{
if(!GetFlag())
{
print(" Canceled ");
return ;
}
}
您可以使用sleep()
将应用程序暂停给定的秒数,也可以使用usleep()
将应用程序暂停给定的微秒数。
您还可以探索select()
具有微秒精度暂停的阻塞属性。有些应用程序更喜欢这样做,不要问我为什么。
关于你的while()
循环,永远不要那样做。它没有暂停。您的应用程序将循环使用 99% 的 CPU,直到时间过去。这是一种非常愚蠢的做法。
此外,您最好使用它time()
来获取当前的 UNIX 时间并将其用作参考,并difftime()
以秒为单位获取时间增量以与sleep()
.
您可能clock()
对endwaitTime
.clock()
关注http://linux.die.net/man/3/sleep
#include <unistd.h>
...
// note clock() is seconds of CPU time, but we will sleep and not use CPU time
// therefore clock() is not useful here ---
// Instead expiration should be tested with time(), which gives the "date/time" in secs
// since Jan 1, 1970
long int expiration = time()+300 ; // 5 minutes = 300 secs. Change this as needed.
while(time() < expiration)
{
sleep(2); // dont chew up CPU time, but check every 2 seconds
if(!GetFlag())
{
print(" Canceled ");
return ;
}
}
...
当然,如果一个 sleep() 足够好,您可以完全摆脱 while 循环。对于短暂的停顿,这可能没问题。输入在进程睡眠时仍然由 Linux 排队,当它从睡眠中唤醒时将被传递到程序的标准输入。