睡眠发生在任何输出之前,而不是介于两者之间

编程语言 2026-07-08

我在尝试写一个程序,依次打印一行文本、等待一段时间、再打印一行文本,等等。我已经尝试了这个:

(print "test")
(sleep 1)
(print "test 2")
(sleep 1)
(print "test 3")

但这只会在执行起始阶段产生一个2 秒的延迟,然后一次性打印出所有输出。我已经尝试过使用 finish-output,但似乎并没有什么作用,用 format 代替print也同样没有帮助。

解决方案

问题出在输出缓冲区。向 *STANDARD-OUTPUT* 写入时,缓冲区默认只有在写入换行符时才会被刷新。由于 print 在输出的起始处就写入换行符,它会刷新前一次调用的输出,而当前的输出仍然处于缓冲状态。

在每次调用 print 之后添加 (force-output) 就能解决。这样就会立即刷新缓冲区。

(defun test-print ()
  (print "test")
  (force-output)
  (sleep 1)
  (print "test 2")
  (force-output)
  (sleep 1)
  (print "test 3"))
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章