3

我想知道如何在不使用 while 循环的情况下使用 C 来延迟几秒钟。我得到的样本正在使用 while 循环。这可行,但我不想使用 while 循环。请帮忙

while(clock() < endwaitTime)
    {
        if(!GetFlag())
        {
            print(" Canceled ");
            return ; 
        }
    }
4

2 回答 2

3

您可以使用sleep()将应用程序暂停给定的秒数,也可以使用usleep()将应用程序暂停给定的微秒数。

您还可以探索select()具有微秒精度暂停的阻塞属性。有些应用程序更喜欢这样做,不要问我为什么。

关于你的while()循环,永远不要那样做。它没有暂停。您的应用程序将循环使用 99% 的 CPU,直到时间过去。这是一种非常愚蠢的做法。

此外,您最好使用它time()来获取当前的 UNIX 时间并将其用作参考,并difftime()以秒为单位获取时间增量以与sleep().

您可能clock()endwaitTime.clock()

于 2013-06-12T03:43:58.693 回答
1

关注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 排队,当它从睡眠中唤醒时将被传递到程序的标准输入。

于 2013-06-12T03:45:15.653 回答