在 Tcl 中使用命令后

After command usage in Tcl

所以我的理解是 after 命令可以用来延迟脚本或命令的执行,但是当我执行下面的命令时,输出会立即打印出来

命令: after 4000 [list puts "hello"]

输出:

hello

after#0

问题:为什么这里没有延迟4s输出?

你写的有用;我只是在这样的 tclsh 提示符下尝试了它:

% after 4000 [list puts "hello"]; after 5000 set x 1; vwait x

你有没有写别的东西,比如:

after 4000 [puts "hello"]

在这种情况下,您不会延迟 puts 的执行,而是立即调用它并将其结果(空字符串)用作 after 的参数(这是有效的,但没用)。

[list …] 视为一种特殊的引用。


运行交互时的另一种可能性是,您在 运行 宁 after 和启动事件循环之间需要几秒钟(因为回调只是 运行 通过事件循环)。你当然不会在 wish 中看到它——这总是 运行 一个事件循环——但它在 tclsh 中是 可能的 ,因为它不会默认情况下不启动事件循环。但就省略 list 单词的概率而言,我认为这是一个遥远的第二......