预计"嗨再次"在" hello world"之后5秒出现在控制台上。但实际上,控制台是空的5秒钟,然后我可以看到这两个消息。我该怎么做才能获得预期的结果?
#include <QThread>
#include <QTextStream>
QTextStream qout(stdout);
int main()
{
qout << "hello world\n";
QThread::sleep(5);
qout << "hi again\n";
return 0;
}
//&#34;多线程&#34;标签就在那里,因为我在编写多线程程序时发现了这个问题,并且该解决方案可以应用于多线程应用程序。
答案 0 :(得分:9)
QTextStream不会自动刷新换行符上的缓冲区。这里最简单的解决方案是使用endl,它会添加一个换行符并为你调用flush():
qout << "hello world" << endl;
QThread::sleep(5);
qout << "hi again" << endl;
当然,您可以手动调用flush():
qout << "hello world\n";
qout.flush();
QThread::sleep(5);
qout << "hi again\n";
qout.flush();
根据您的使用情况,另一种可能性是依赖于QTextStream的析构函数调用flush()。
{
QTextStream qout(stdout);
qout << "hello world\n";
}
QThread::sleep(5);
{
QTextStream qout(stdout);
qout << "hi again\n";
}
答案 1 :(得分:3)
问题与多线程无关。原因是您的输入存储在缓冲数据中,尚未写入stdout。为了强制流写入数据,请在sleep()=)之前调用QTextStream :: flush()
#include <QThread>
#include <QTextStream>
QTextStream qout(stdout);
int main()
{
qout << "hello world\n";
qout.flush();
QThread::sleep(5);
qout << "hi again\n";
qout.flush();
return 0;
}