在 http::geturl 中运行异步回调



我尝试异步运行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 来离开事件循环。

最新更新