在指定的时间量(毫秒)后停止的C函数

时间:2018-10-19 08:07:56

标签: c ubuntu time time.h

我为此编写了代码,但无法正常工作。这是代码:

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

long timediff(clock_t t1, clock_t t2) {
    long elapsed;
    elapsed = ((double)t2 - t1) / CLOCKS_PER_SEC * 1000;
    return elapsed;
}

int main(void) {
    clock_t t1, t2;
    int i;
    long elapsed;

    long settime = 9;   
    t1 = clock();
    for (i=0; i > 10000000; i++) {
           t2 = clock();
       elapsed = timediff(t1, t2);
           if (elapsed==settime)
                 printf("set time reached\n");
        break;
    }



    printf("elapsed: %ld ms\n", elapsed);


    return 0;
}

由于某种原因,它不执行if语句。我唯一可以看到打印到终端上的是elapsed: 4195440 ms。我需要能够指定我希望程序在运行之前运行多长时间。

例如,我希望此代码运行的方式是,我将设置时间设置为5,以便在5毫秒后代码停止,并且“已达到设置时间”消息显示在终端上。我不确定这是否重要,但是我正在使用Ubuntu OS。

3 个答案:

答案 0 :(得分:1)

检查指令break;的正数,它应该在if块中! 以及for循环中的符号;必须为i<1000000

答案 1 :(得分:1)

您需要在break的正文中包含if

                 if (elapsed==settime)
                 {printf("set time reached\n");
                 break;}

如注释部分所建议,您应该更改for循环条件,否则它将不会执行。将此for (i=0; i > 10000000; i++)更改为for (i=0; i < 10000000; i++)

答案 2 :(得分:0)

clock()只是无法注册需要少量时间的工作。这是非常意外的,因为clock()应该返回程序使用的处理器时间。分辨率取决于操作系统,但通常在10到16毫秒之间。

在您的代码中,看到long settime = 9;。这意味着您希望在9 ms处停止,该分辨率小于clock()的10ms分辨率。

一种解决方法是更改​​以下代码:

if (elapsed==settime)
      printf("set time reached\n");
break;

if (elapsed>=settime) {
        printf("set time reached\n");
        break;
}