You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:编写可运行的TCL异步HTTP网页下载程序(附代码)

修复后的异步网页获取TCL程序

你的代码核心逻辑没问题,但缺少对vwait触发条件的处理——程序定义了等待::done变量,却从未在所有请求完成时设置它,导致程序会一直挂起。以下是修复后的完整可运行代码:

package require http

# 初始化未完成请求计数器
set ::pending_requests 3

proc cb {token} {
    puts "网页内容长度:[string length [http::data $token]]"
    http::cleanup $token

    # 每完成一个请求就递减计数器
    incr ::pending_requests -1
    # 所有请求完成时触发vwait结束程序
    if {$::pending_requests == 0} {
        set ::done 1
    }
}

http::geturl "http://www.google.com" -command cb
http::geturl "http://www.wikipedia.org" -command cb
http::geturl "http://www.facebook.com" -command cb

vwait ::done
puts "所有网页请求已完成"

关键修改说明:

  • 添加::pending_requests全局变量跟踪未完成请求数量,初始值设为你发起的请求总数(此处为3)
  • 在回调函数cb中,每处理完一个请求就将计数器减1
  • 当计数器归0时,设置::done变量,终止vwait的等待状态
  • 优化了输出信息,让结果更易读

内容的提问来源于stack exchange,提问作者buchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 16:03:10