在指定的时间量(以毫秒为单位)后停止的 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;
}
我为此编写了代码,但它不起作用。这是代码:
#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()
.
解决方法是更改以下代码:
if (elapsed==settime)
printf("set time reached\n");
break;
到
if (elapsed>=settime) {
printf("set time reached\n");
break;
}