如何在C中控制执行时间

时间:2010-12-10 01:20:45

标签: c

我有一个C程序,它会将素数打印成.txt文件。 我希望程序按分钟问我执行时间。试着用这段代码来解决。

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

int main()
{
    execute();
    return(0);
}

int execute(int minute)
{
    time_t now;
    time(&now);
    struct tm *tmp = localtime(&now);
    printf("How long you want to execute the program by minute? ");
    scanf("%d",&minute);
    printf("%d %02d %02d\n",tmp->tm_hour, tmp->tm_min+minute, tmp->tm_sec);
    return(minute);
}

这里也是我想要运行的代码。

#include <stdio.h>

int isprime(int x);

int main(void)
{
        int AX_REGISTER, BX_REGISTER;
        FILE *number, *primes;

        int forever = 1;

        while (forever)
        {

                if ((number = fopen("lastnumber.txt", "r")) == NULL)
                {
                        fprintf(stderr, "Cannot read LASTNUMBER.txt file.\n");
                        return 1;
                }
                fscanf(number,"%d",&AX_REGISTER);
                fclose(number);

                BX_REGISTER=AX_REGISTER;
                AX_REGISTER=AX_REGISTER+1;

                if ((number = fopen("lastnumber.txt", "w")) == NULL)
                {
                        fprintf(stderr, "Cannot write LASTNUMBER.txt file.\n");
                        return 1;
                }
                fprintf(number,"%d\n",AX_REGISTER);
                fclose(number);

                if (isprime(BX_REGISTER))
                {

                        if ((primes = fopen("primes.txt", "a")) == NULL)
                        {
                                fprintf(stderr, "Cannot open PRIMES.txt file.\n");
                                return 1;
                        }

                        fprintf(primes,"%d\n",BX_REGISTER);
                        fclose(primes);
                }

        }
        return 0;
}

int isprime(int x)
{
        int i;

        for (i=2;i<x;i++)
        {
                if (x%i==0)
                        return 0;
        }
        return 1;
}

由于我是C编程语言的新手,我自己无法解决。有人能帮我吗?

2 个答案:

答案 0 :(得分:2)

某些平台具有alarm()功能,您可以使用该功能在指定的秒数后向您的应用程序发送信号。

如果您不在Windows上,man alarm应该会为您提供有关此功能的一些信息。如果您使用的是Windows,则可能需要采用其他方法。


另一方面,你应该考虑使用对你正在编写的代码有意义的变量名。对于一个随意的读者,BX_REGISTER这个名字毫无意义。也许可以考虑将其名称更改为number_to_test(以及AX_REGISTERnext_number或其他内容。

答案 1 :(得分:0)

由于您在while循环中运行,只需获取while循环之外的当前时间,添加分钟,并在while循环结束时获取时间。类似的东西:

time_t now;
time_t end_time;

now = time();
end_time = now + (minutes * 60);

while(now < end_time)
{
    ...Do processing here...

    now = time();
}

这种方法的一个缺点是,如果isprime()需要很长时间才能运行,那么你可能会过多地超过结束时间。解决这个问题的一种方法是将end_time值传递给isprime()并在该函数的循环中检查它。或者只需在运行程序的终端中按Ctrl-C:)

一定要在程序崩溃的情况下写入文件 - 你不会失去工作时间,但我建议你只能在while循环之前读取lastnumber.txt中的值,之后只需保留它记忆。它会加快你的程序。

此外,除非在具有可怕文件锁定语义的Windows上运行,否则可能值得保持写文件句柄打开整个时间以节省不断打开和关闭文件的周期。