在D中编写CLI工具,我有一个进度计数器,这是一个循环,并打印下一个以\ r开头的数字。
以下是显示问题的最小示例
import std.stdio;
import core.thread;
void main(string[] args) {
for (int i = 0; i < 10000; i++) {
write("\r", i);
Thread.sleep(msecs(1));
}
}
我注意到,至少mac终端缓冲输出,打印换行后刷新,或者打印了一定数量的字符。
对我来说,这意味着反作用迟滞并偶尔会上升。
我的问题是, 如何在不打印换行符的情况下强制刷新输出缓冲区?
答案 0 :(得分:1)
通过'清除缓冲区',你可能意味着冲洗。 stdout.flush;
应该做到这一点。
清除通常是指从控制台删除所有输出以获得干净的窗口。
答案 1 :(得分:0)
除了weltensturm's定期回复stdout.flush
,您可以尝试手动设置缓冲
stdout.setvbuf(0, _IOLBF);
请参阅IEEE Std 1003.1, 2013 - setvbuf(或您当地的联机帮助页)以获取概述。