multithreading - “Thread.sleep()”与“write()”一起使用时会产生一些奇怪的副作用

标签 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()函数将正常运行。

为什么会这样呢?

最佳答案

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

关于multithreading - “Thread.sleep()”与“write()”一起使用时会产生一些奇怪的副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23245750/

相关文章:

d - to!string(enum.member) 如何工作?

python - 如何从另一个线程向 gui 发送标签 - PyQt

java - 为什么 hibernate 主线程会改变 Java 中正在运行的其他线程的行为?

java - 在同步块(synchronized block)中写入 volatile 数组的必要性

d - D 中的线程局部存储变量,与模块初始化程序的交互混淆

binary-search - D 2.0 (Phobos) 中的二分搜索?

Java邮件 : How to use different SOCKS5 for different threads?

javascript - 在 Javascript 中访问对象时自动调用函数

d - 为什么我不能为 D 中的结构实现默认构造函数?

d - 访问范围之外的类方法实例的正确方法是什么?