【问题标题】:C function that stops after a specified amount of time in milliseconds在以毫秒为单位的指定时间量后停止的 C 函数
【发布时间】:2026-01-30 06:30:01
【问题描述】:

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

#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。我需要能够指定程序在被剪切之前运行多长时间。

例如,我希望此代码运行的方式是,我将 settime 设置为 5,这样在 5 毫秒后,代码停止并且“已达到设置时间”消息打印到终端。我不确定这是否重要,但我使用的是 Ubuntu 操作系统。

【问题讨论】:

  • (elapsed&gt;=settime) 代替(elapsed==settime) 是否有效?我担心它可能会“超过”您的预设值。
  • @Blaze 感谢您的评论。不幸的是,这不起作用。它仍然打印elapsed: 4195968 ms
  • 另外,break 不是if 语句的一部分。
  • for (i=0; i &gt; 10000000; i++) 应该是 for (i=0; i &lt; 10000000; i++) 否则控制不会只进入循环。此外,10000000 对于整数来说太大了。
  • @kiranBiradar:“10000000 对于整数来说也太大了。”好吧,我想说 Ubuntu 至少是 32 位的,所以 int 通常会上升到2'147'483'647.

标签: c ubuntu time time.h


【解决方案1】:

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

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

按照评论部分的建议,您应该更改 for 循环条件,否则它将不会执行。将此for (i=0; i &gt; 10000000; i++) 更改为for (i=0; i &lt; 10000000; i++)

【讨论】:

  • 我测试了elapsed &gt;= settime
【解决方案2】:

检查指令break; 的位置,它应该在if 块中! 也是for循环中的标志;必须是i&lt;1000000

【讨论】:

    【解决方案3】:

    clock() 只是无法注册需要少量时间的工作。这是非常出乎意料的,因为 clock() 应该返回程序使用的处理器时间。分辨率取决于操作系统,但通常在 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;
    }
    

    【讨论】:

      最近更新 更多