如果我注釋掉 sleep_for,程式會生成逗號和點而不會出現問題。但是當我添加 sleep_for 時,它會掛起一段時間,然后突然寫下所有的逗號和圓點,你本來希望在掛起期間一次均勻地出現。
這個程式從更大更復雜的東西減少到最小的作業示例,但幸運的是問題仍然存在。
(在 Ubuntu 20.04.4 LTS 上使用 apt-installed g 11.2.0 編譯)
#include <chrono>
#include <iostream>
#include <RingBuffer.h>
#include <thread>
void writeCharToBuffer(volatile bool& quit, char, std::chrono::milliseconds);
int main()
{
bool quit { false };
using namespace std::literals;
std::thread dotToBufferThread { writeCharToBuffer, std::ref(quit), '.', 100ms};
std::thread commaToBufferThread { writeCharToBuffer, std::ref(quit), ',', 200ms};
int quitKey;
std::cin >> quitKey;
quit = true;
dotToBufferThread.join();
commaToBufferThread.join();
}
void writeCharToBuffer(volatile bool& quit, char c, std::chrono::milliseconds d)
{
while (!quit)
{
std::cout << c;
std::this_thread::sleep_for(d);
}
}
uj5u.com熱心網友回復:
輸出到std::cout 被緩沖。
沒有延遲的輸出可能會很快填滿緩沖區,以至于您不會注意到它。
如果要立即輸出,則需要顯式重繪 它:
std::cout << c << std::flush;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/456307.html
