std::cout 输出的时间很奇怪
The timing of std::cout output is strange
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
int main()
{
std::cout << "1";
std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
std::cout << "2";
std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
std::cout << "3";
std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
return 1;
}
我希望每秒打印std::cout
。
但是当我运行这段代码的时候,结果值123
是同时打印出来的
为什么?
请告诉我如何修复它。
您可能需要在每个 cout 之后刷新标准流,否则它们可能会等到程序结束时才一次刷新。
std::cout
缓冲:
C++11 27.4.2 [narrow.stream.objects]/3 : The object cout controls output to a stream buffer associated with the object stdout
所以你需要明确地刷新这个缓冲区来得到你想要的。以下是一些方法:
1.使用 operator<<
和 std::flush
std::cout << "1" << std::flush;
2。使用免费函数std::flush(std::basic_ostream)
std::cout << "1";
std::flush(std::cout);
3。使用成员函数std::cout::flush()
std::cout << "1";
std::cout.flush();
4.使用 operator<<
和 std::endl
std::cout << "1" << std::endl;
这当然也会插入一个换行符,这可能不是您想要的。
这是由于缓冲。
在每个 cout
之后,您需要使用 std::flush(std::cout);
.
等任何语句来刷新缓冲区
这可能对您有所帮助。
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
int main(){
std::cout << "1";
//std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
std::flush(std::cout);
std::cout << "2";
//std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
std::flush(std::cout);
std::cout << "3";
//std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
std::flush(std::cout);
return 0;
}
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
int main()
{
std::cout << "1";
std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
std::cout << "2";
std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
std::cout << "3";
std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
return 1;
}
我希望每秒打印std::cout
。
但是当我运行这段代码的时候,结果值123
是同时打印出来的
为什么?
请告诉我如何修复它。
您可能需要在每个 cout 之后刷新标准流,否则它们可能会等到程序结束时才一次刷新。
std::cout
缓冲:
C++11 27.4.2 [narrow.stream.objects]/3 : The object cout controls output to a stream buffer associated with the object stdout
所以你需要明确地刷新这个缓冲区来得到你想要的。以下是一些方法:
1.使用 operator<<
和 std::flush
std::cout << "1" << std::flush;
2。使用免费函数std::flush(std::basic_ostream)
std::cout << "1";
std::flush(std::cout);
3。使用成员函数std::cout::flush()
std::cout << "1";
std::cout.flush();
4.使用 operator<<
和 std::endl
std::cout << "1" << std::endl;
这当然也会插入一个换行符,这可能不是您想要的。
这是由于缓冲。
在每个 cout
之后,您需要使用 std::flush(std::cout);
.
这可能对您有所帮助。
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
int main(){
std::cout << "1";
//std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
std::flush(std::cout);
std::cout << "2";
//std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
std::flush(std::cout);
std::cout << "3";
//std::this_thread::sleep_for( std::chrono::milliseconds(1000) );
std::flush(std::cout);
return 0;
}