【问题标题】:One-Second Timer [duplicate]一秒计时器[重复]
【发布时间】:2013-05-30 19:53:40
【问题描述】:

我需要一个每秒执行 X 次的计时器。 我做了这个,但是在程序终止之前它不会打印任何东西,我觉得这很奇怪。 如果你把三个作为计数器,它会在三秒后打印所有内容,如果你选择它,它会打印 100。

如何让它每秒打印一次,而不是在终止时一次打印?

int main()
{
    using namespace std;
    //Number to count down from
    int counter = 10;
    //When changed, a second has passed
    int second = (unsigned)time(NULL);
    //If not equal to each other, counter is printed
    int second_timer = second;
    while (counter > 0) {
        second = (unsigned)time(NULL);
        while (second != second_timer) {
            //Do something
            cout << counter-- << ", ";
            //New value is assigned to match the current second
            second_timer = second;
        }
    }
    cout << "0" << endl;
    return 0;
}

【问题讨论】:

  • 在等待超时时耗尽所有 CPU 确实不是解决方案。无论如何,这与计时器无关。 std::cout 已缓冲。

标签: c++ macos timer counter


【解决方案1】:

在您要刷新的位置添加&lt;&lt; flush。 IE。将您的打印输出更改为:

cout &lt;&lt; counter-- &lt;&lt; ", " &lt;&lt; flush;

【讨论】:

    【解决方案2】:

    endl 导致缓冲区“刷新”并写入标准输出。您可以将&lt;&lt; endl; 添加到cout &lt;&lt; counter--,使用cout.flush(); 手动刷新cout 流,或者将&lt;&lt; flush; 附加到cout 表达式的末尾(感谢@Rob!)

    有关更多信息,this question 的答案似乎更详细。

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      相关资源
      最近更新 更多