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

Tim*_*man 1 multithreading d

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

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

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

输出会像这样(某处)变化:

23343
30948332
42048332
Run Code Online (Sandbox Code Playgroud)

看起来write()函数工作可以在进程中间中断.

如果我们write()改为writeln(),sleep()函数将正常工作.

为什么会这样呢?

And*_*vić 7

stdout.flush()每次通话后使用write.这是因为默认情况下写入是缓冲的,而writeln(不像write)默认情况下会刷新输出.