【问题标题】:Trouble creating a Delay() function in C using time(NULL)使用 time(NULL) 在 C 中创建 Delay() 函数时遇到问题
【发布时间】:2014-11-03 11:02:47
【问题描述】:

我对编程和 C 语言比较陌生,但我一直在尝试用 C 语言创建自己的“延迟”函数。 从本质上讲,它会在用户输入的秒数内暂停程序 例如:

    int main (int argc, char *argv[]) {
      printf("There will now be a ten second pause.\n");
      delay(10);
      printf("Ten seconds have now passed.\n");
      return 0;
    }

程序将打印第一个输出,等待十秒钟,然后打印最后一个。 我当前的函数如下所示:

    void delay(unsigned int seconds) {
      time_t old_time = time(NULL), target_time = old_time;
      while((target_time - old_time) < seconds) target_time = time(NULL);
    }

该函数在等待指定的时间后相当准确。 但是,程序在延迟之前不会打印第一个输出,这 肯定不是我想要的:( 相反,程序一启动就等待十秒钟,然后打印两条语句,而不是打印第一条语句,延迟,然后打印最后一条。

我对 time() 的理解是否遗漏了什么?或者这对某些人不起作用 原因?同样,为了澄清起见,我试图解决延迟发生在程序中的其他任何事情发生之前的问题,即使该函数在其他函数之后也是如此。 任何有助于我理解这一点的想法或建议都会很棒!

谢谢! :)

【问题讨论】:

  • flush stdout - 缓冲区未满(正在打印,只是未显示
  • 太棒了,它成功了!从来不知道这个功能的存在。感谢您的帮助:)
  • VOID Sleep(DWORD dwMilliseconds); for windows in windows.h

标签: c debugging time delay


【解决方案1】:

您的问题很可能是因为 stdout 流被缓冲了。退房 this link,关于这个主题的文章很好。

另外,您不使用 C 标准库的 sleep() 函数是否有原因?

【讨论】:

  • 感谢链接,非常有用!你对缓冲的流是正确的。我查找了 sleep() 并尝试使用它,但程序无法识别它。我包括了这两个:#include 和 #include "windows.h",但它仍然不起作用,所以我认为创建自己的会很有趣
猜你喜欢
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
相关资源
最近更新 更多