就是下面的代码,功能是3个线程循环访问google baidu 和 yahoo,运行速度不快,感觉线程循环出了问题,但又不知道该怎么写好- <?xml version="1.0" encoding="gb2312" ?>
- <!--关闭"信息窗口"可以提升效率加快速度
- 创建时间:2009年06月28日-15:27-->
- <脚本区块 语言="LAScript" 名称="init" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
- <![CDATA[
- --区块名字前添加"init"前缀则不会重复运行
- _set = ape:loadSetting(); --读取自定义属性
- stopPlay = function() --这个函数回放停止时被调用.
- ape:saveSetting(_set); --保存自定义属性
- collectgarbage();--清理内存
- end;
- --请在下面添加不需要重复运行的脚本
- --[[ 添加横线取消注释块
- do return false end; --退出程序
- do return "区块名字" end;--转向指定区块
- do return 2 end;--转向第二个区块
- --]]
- import("std"); --从外部文件引用名字空间
- ----------------------------------------
- web.loadProc = function(url,wb) --下载完成回调函数,url当前网址,wb当前窗体对象,这里教程错了,第二个参数不是hwnd,应该是wb对象
- if (string.find( url,"google",1,true)) then
- isThreadOk[1]=true
- print(" 线程 1 已经完成!\r\n")
- elseif (string.find( url,"baidu",1,true)) then
- isThreadOk[2]=true
- print(" 线程 2 已经完成!\r\n")
- elseif(string.find( url,"yahoo",1,true)) then
- isThreadOk[3]=true
- print(" 线程 3 已经完成!\r\n")
- end;
- end;
- ----------------------------------------
- win.consoleOpen()
- threadTab={} ---------存储线程的 tab
- isThreadOk={} --------存储线程状态的 tab
- mUrl={}
- mUrl[1]="http://www.google.com"
- mUrl[2]="http://www.baidu.com"
- mUrl[3]="http://www.yahoo.cn"
- x=0
- for i=1,3,1 do
- threadTab[i]=web.new()
- threadTab[i]:setSilent(true,true,true,true)
- threadTab[i]:setDL(_DLCTL_NO_RUNACTIVEXCTLS | _DLCTL_NO_DLACTIVEXCTLS)
- isThreadOk[i]=true -------线程 i 是否可用
- end;
- --------------------------------------- 分配线程完毕
- print("\r\n******************第 "..(x+1).." 轮,访问 "..(3*x+1).." -> "..(3*x+3).." 个\r\n")
- while( (true) and nStop() ) do
- for i=1,3,1 do
- if (isThreadOk[i]==true and nStop()) then --如果线程已经完成,就可以继续下一个网址
- print(" 线程 "..i.." 开始访问第 "..(3*x+i).." 个")
- isThreadOk[i]=false ----访问之前,先设置为线程没完成
- threadTab[i]:go(mUrl[i])
- elseif (isThreadOk[i]==false and nStop()) then
- print(" 线程 "..i.." 还没完成,等下吧。这个线程等待的同时,其他线程有的已经完成,应该提前进入下一轮,但是被阻塞了\r\n")
- threadTab[i]:wait() --------------大家可以把这句注释掉,看看什么情况
- if (isThreadOk[i]) then
- print(" 线程 "..i.." 回到工作,开始访问第 "..(3*x+i).." 个")
- else
- print(" 不等了,线程 "..i.." 强行回到工作,开始访问第 "..(3*x+i).." 个")
- end;
- threadTab[i]:go(mUrl[i])
- elseif (not nStop()) then
- break;
- end;
- end;
- x=x+1
- print("\r\n******************第 "..(x+1).." 轮,访问 "..(3*x+1).." -> "..(3*x+3).." 个\r\n")
- end;
- ]]>
- </脚本区块>
- <脚本区块 语言="LAScript" 名称="LAScript" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
- <![CDATA[
- --请在下面添加脚本代码(重复运行)
- ]]>
- </脚本区块>
- <数据区块 />
复制代码

iroieguy 最后编辑于 2009-06-28 20:51:07