[英]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
會同時打印出來。
為什么?
請告訴我如何解決它。
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. 使用免費的 function std::flush(std::basic_ostream)
std::cout << "1";
std::flush(std::cout);
3.使用成員function std::cout::flush()
std::cout << "1";
std::cout.flush();
4. 將operator<<
與std::endl
一起使用
std::cout << "1" << std::endl;
這當然也會插入換行符,可能不是您想要的。
您可能需要在每個cout之后刷新標准 stream 否則他們可能會等到程序結束時一次性刷新所有內容。
這是由於緩沖。 在每個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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.