如何在C中的某个时间后停止while循环

时间:2014-01-17 08:31:06

标签: c

如何在C中的某个时间后停止while循环,我在c ++中完成它并且我尝试将其转换为c(下面)但它没有工作

#include <time.h>

int main(void)
{
    time_t endwait;
    time_t start;

    endwait = start + seconds ;
    while (start < endwait)
    {
        /* Do stuff while waiting */
    }
}

4 个答案:

答案 0 :(得分:7)

在C中,没有构造函数,因此time_t start;只声明一个time_t类型的变量。它没有设置为等于当前时间。因此,您需要在循环之前读取当前时间(并将其分配给starttime),并在循环内(或在while条件下)读取它。

此外,循环应为

while ((currenttime = [code to assign time]) < endwait)
{
    ...
}

或更整洁

while ([code to assign time] < endwait)
{
    ...
}

IE看当前时间,而不是开始时间。

为了阅读时间,你想使用time(NULL)(如果你在几秒钟内使用时间值。所以你完成的程序看起来像(未经测试):

#include <time.h>

int main(void)
{
    time_t endwait;
    int seconds = 123;

    endwait = time (NULL) + seconds ;
    while (time (NULL) < endwait)
    {
        /* Do stuff while waiting */
    }
}

另请注意,如果秒数很小,您可能希望使用更高精度gettimeofday。这样可以防止等待1秒钟等待0秒到1秒之间的任何事情。

答案 1 :(得分:4)

试试我的测试代码怎么样:

#include <stdio.h>
#include <time.h>
#include <unistd.h>

int main(void)
{
    time_t endwait;
    time_t start = time(NULL);
    time_t seconds = 10; // end loop after this time has elapsed

    endwait = start + seconds;

    printf("start time is : %s", ctime(&start));

    while (start < endwait)
    {
        /* Do stuff while waiting */
        sleep(1);   // sleep 1s.
        start = time(NULL);
        printf("loop time is : %s", ctime(&start));
    }

    printf("end time is %s", ctime(&endwait));

    return 0;
}

示例外印是:

wugq@SSDEV016:~/tools/test $ ./a.out
start time is : Fri Jan 17 17:12:57 2014
loop time is : Fri Jan 17 17:12:58 2014
loop time is : Fri Jan 17 17:12:59 2014
loop time is : Fri Jan 17 17:13:00 2014
loop time is : Fri Jan 17 17:13:01 2014
loop time is : Fri Jan 17 17:13:02 2014
loop time is : Fri Jan 17 17:13:03 2014
loop time is : Fri Jan 17 17:13:04 2014
loop time is : Fri Jan 17 17:13:05 2014
loop time is : Fri Jan 17 17:13:06 2014
loop time is : Fri Jan 17 17:13:07 2014
end time is Fri Jan 17 17:13:07 2014

答案 2 :(得分:0)

请举一个完整的例子。我认为您必须使用 time() 来获取大致当前时间。之后您可以继续。

答案 3 :(得分:0)

如果你在Linux上,你应该考虑(取决于你的应用程序)使用信号,检查报警功能和信号(这个定义处理程序,这将定义一旦收到信号你的程序的行为)

您可以在手册页中找到详细信息:

$ man signal
...
$ man alarm
...