在Linux

时间:2015-11-01 09:34:14

标签: c++ linux output delay

我希望将一些随机字符打印到控制台,然后由"\b"删除。在此之后我想把我自己的变量放在一边,看起来像是“随机化”。问题是它发生得太快了。我希望使用usleepsleep函数来延迟输出,但是当我使用它时,没有任何内容打印到控制台。
简短的例子:

#include <iostream>
#include <unistd.h>
using namespace std;

int main()
{
    char chars[]={'a','b','c','g','h','u','p','e','y'};
    for(int i=0; i<8; i++)
    {
        cout << chars[i];
        usleep(200000);
        cout << "\b";

    }
}

3 个答案:

答案 0 :(得分:4)

问题是,std::cout is line-buffered。它将所有输入存储在缓冲区中,直到遇到换行符(或程序终止)。使用std::flush明确刷新std::cout

cout << chars[i] << flush;

注意:

  • 自C ++ 11以来,多线程和时间都是标准化的。这带来了std::this_thread:sleep_for函数,您应该将其用于便携式&gt; = C ++ 11程序:

    std::this_thread::sleep_for(std::chrono::milliseconds(200));
    

答案 1 :(得分:1)

在许多系统上输出都是缓冲的。

要确保您发送到cout的内容确实已从缓冲区中清除,您需要调用

cout.flush();

睡觉前

答案 2 :(得分:1)

从github尝试我的小程序slowtty

它允许您在pty中模拟旧rs232c行的行为,通过延迟每个字符的输出,stty(1)命令允许设置波特率。

你用

来调用它
$ slowtty
$ stty 1200
$

终端开始慢速写字符(如1200波特线)