xiv*_*r77 3 c++ qt multithreading
预计在"hello world"之后5秒,"hi hi"会出现在控制台上.但实际上,控制台是空的5秒钟,然后我可以看到这两个消息.我该怎么做才能获得预期的结果?
#include <QThread>
#include <QTextStream>
QTextStream qout(stdout);
int main()
{
qout << "hello world\n";
QThread::sleep(5);
qout << "hi again\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
//"多线程"标记就在那里,因为我在编写多线程程序时发现了这个问题,并且该解决方案可以应用于多线程应用程序.
QTextStream不会自动刷新换行符上的缓冲区.这里最简单的解决方案是使用endl,它会添加换行符并为您调用flush():
qout << "hello world" << endl;
QThread::sleep(5);
qout << "hi again" << endl;
Run Code Online (Sandbox Code Playgroud)
当然,您可以手动调用flush():
qout << "hello world\n";
qout.flush();
QThread::sleep(5);
qout << "hi again\n";
qout.flush();
Run Code Online (Sandbox Code Playgroud)
根据您的使用情况,另一种可能性是依赖于QTextStream的析构函数调用flush().
{
QTextStream qout(stdout);
qout << "hello world\n";
}
QThread::sleep(5);
{
QTextStream qout(stdout);
qout << "hi again\n";
}
Run Code Online (Sandbox Code Playgroud)