【问题标题】:Run program for 3 seconds运行程序 3 秒
【发布时间】:2018-12-11 20:24:53
【问题描述】:

我正在尝试运行一小段代码 3 秒: 示例:

WHILE(3 SECONDS){
  printf("Hey");
}

我尝试使用 time_t,计算一些时间直到达到极限,如下所示:

time_t endwait;
time_t atual = (unsigned int)time(NULL);
time_t duration = secs;

while(atual < endwait){
  printf("Hey");
}

但它不起作用,程序卡在循环打印“嘿”。

【问题讨论】:

  • 您可能想在循环内再次设置实际?这总是正确的,因为变量永远不会改变
  • 初始化endwait 也是个好主意。
  • 你在哪里设置 endwait 等于?看来您只是检查当前时间是否小于声明它时 endwait 中的任何值,因为您实际上从未给它赋值,因此 while 循环可能是未定义的行为,由于 endwait 开始时会永远循环

标签: c linux time


【解决方案1】:

简短版:

time_t endwait = time(NULL) + secs;

while(time(NULL) < endwait){
  printf("Hey");
}

甚至:

for(time_t start = time(NULL);time(NULL)-start < secs;) printf("Hey");

【讨论】:

  • 我敢打赌,这将在计时器结束后很长时间内继续打印Heys。 printf 实际上是一个非常糟糕的功能来测试它。 (我也打赌你已经知道了。)
【解决方案2】:

您需要在 while 循环中检索当前时间。因此,获取您的代码,它应该看起来像这样:

time_t actual = time(NULL);
time_t duration = secs;
time_t endwait = actual + duration ;

while(actual < endwait){
  printf("Hey");
  actual = time(NULL);
}

【讨论】:

  • 你不需要转换time(NULL),因为它返回一个time_t类型值。
猜你喜欢
  • 2021-05-10
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多