我为此编写了代码,但无法正常工作。这是代码:
#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。
答案 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;
}