“Thread.sleep()”有一些奇怪的副作用,使用“write()”

时间:2014-04-23 13:24:49

标签: multithreading d

我正在尝试使用以下代码动态更改Windows控制台中的输出:

for(int i = 0;; i++,Thread.sleep(dur!("msecs")(200)))
    write("\r",i);

但你必须等待很长时间才能看到屏幕上的内容。即使改为1毫秒,持续时间也足以将数字重写减慢到2-3秒。

输出改变如此(某处):

23343
30948332
42048332

似乎write()函数工作可以在进程中间中断。

如果我们将write()更改为writeln()sleep()功能将正常运行。

为什么会这样?

2 个答案:

答案 0 :(得分:7)

每次致电stdout.flush()后使用write。这是因为默认情况下写入是缓冲的,而writeln(与write不同)默认情况下刷新输出。

答案 1 :(得分:3)

正在缓冲输出。

stdout.flush()来电之前插入对Thread.sleep的来电,以便立即查看输出。