簡體   English   中英

std::cout output 的時機很奇怪

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM