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

C function that stops after a specified amount of time in milliseconds

我为此编写了代码,但它不起作用。这是代码:

#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 毫秒后,代码停止并将 'set time reached' 消息打印到终端。我不确定这是否重要,但我正在使用 Ubuntu OS。

检查指令的位置 break; 应该在 if 块中! 还有 for 循环中的符号;必须是 i<1000000

您需要在 if

的正文中包含 break
                 if (elapsed==settime)
                 {printf("set time reached\n");
                 break;}

按照评论区的建议,你应该改变for循环的条件,否则它不会执行。将此 for (i=0; i > 10000000; i++) 更改为 for (i=0; i < 10000000; i++)

clock()只是不能注册占用时间少的作品。这是非常出乎意料的,因为 clock() 应该 return 程序使用的处理器时间。分辨率取决于 OS,但通常在 10 到 16 毫秒之间。

我们在您的代码中看到 long settime = 9;。这意味着您希望在 9 毫秒停止,这小于 clock().

的 10 毫秒分辨率

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

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

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