我尝试异步运行http::geturl,并在回调中获取结果。我有这个代码
package require http
proc cb {token} {
exec notify-send "message";
puts "console message"
exec echo "file message" > ~/test_file
}
http::geturl http://mail.ru -command cb
当我像 tclsh main.tcl 一样运行这段代码时,什么也没发生 - 脚本有效但不调用回调
当我像希望main.tcl一样运行此代码时一切正常,我看到"消息"通知,请参阅"控制台消息",test_file收到"文件消息">
为什么会发生这种情况以及我应该如何异步运行 tcl 脚本?
您必须使用 vwait
在适当的位置(注册回调等之后(显式输入 Tcl 的事件循环:
package require http
proc cb {token} {
puts "console message"
set ::done 1; # break out of event loop
}
http::geturl http://example.org/ -command cb
vwait ::done; # enter the event loop
在回调中,您可能希望再次通过设置信号变量 ::done
来离开事件循环。