winhttp.winhttprequest的send后能否不用等待直接进行下一个步骤?
最近编了一段代码,其中有一部分是POST后,不管POST后返回的是什么,直接打开记事本,进行下一步工作。但是发现效率很低,记事本好久才打开。后来反复研究,发现可能的原因是:
因为Send的数据$SendData很大,本地网速又慢,传输要很久,而Send貌似必须传输完返回结果后才能进行下一步工作。
-----------------------------------------------
代码如下:
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("POST", $Url)
$oHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oHTTP.Send($SendData)
ShellExecute("Record.txt", "", "", "open", @SW_MAXIMIZE)
----------------------------------------------
请教:有什么办法可以不用等待Send返回结果就可以进行下一步工作?有没有什么参数?
我现在只能想到的解决办法是多线程,Send是一个线程,让它忙它自己的。同时另外开一个线程,开始打开记事本。
但是Autoit不支持多线程…… 我最初是希望send能像open一样有函数可以用的
$oHTTP.Open("POST", $Url)这个语句如果加上参数false,也就是$oHTTP.Open("POST", $Url,False),那么不用等返回结果就可以进行下一步了
原来希望Send有这个参数,但是现在基本已经认定没有这个参数了
Winhttp的Option我也看了,好像没有相关设置内容 本帖最后由 222222 于 2012-4-30 19:30 编辑
测试了adlib函数,也是不行。AdlibRegister("MyAdlib",50)
Sleep(3000)
exit
Func MyAdlib() ;==>MyAdlib
Dim $CTime = @HOUR & "时" & @MIN & "分" & @SEC & "秒" & @MSEC & "毫秒"
FileWriteLine("Record.txt", "时间1:" & $CTime)
Sleep(600)
Dim $CTime = @HOUR & "时" & @MIN & "分" & @SEC & "秒" & @MSEC & "毫秒"
FileWriteLine("Record.txt", "时间2:" & $CTime)
EndFunc ;==>MyAdlib按道理来说,记录的时间间隔应该是AdlibRegister("MyAdlib",50)里设置的时间间隔,也就是50毫秒吧
但是,实际的时间间隔却是600毫秒,也就是我设置的函数中Sleep(600)设置的时间间隔 本帖最后由 komaau3 于 2012-4-30 19:22 编辑
回复 1# 222222
虽然winhttprequest.5.1组件在au3中不支持event事件,但是想使用异步通信的话可以用下面的方法
Global $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
AdlibRegister("MyAdlib",250)
$oHTTP.Open("POST", $Url,True)
$oHTTP.Send('xxx')
func MyAdlib()
$Status = $oHTTP.Status
$StatusText = $oHTTP.StatusText
;要做什么根据状态来判断把
endfunc
回复 4# komaau3
不行的,我试验过了。必须要等到send语句完整的执行完后才会执行。在send运行过程中,不能运行其它程序。这是adlib的特点决定的,在三楼我编写代码设置了一个测试环境,可以很清楚的看出来。 本帖最后由 komaau3 于 2012-4-30 19:30 编辑
回复 5# 222222
亲。。。好奇你得send多大数据啊 ,设置send超时把,不然只能多进程了 回复222222
亲。。。好奇你得send多大数据啊 ,设置send超时把,不然只能多进程了
komaau3 发表于 2012-4-30 19:29 http://www.autoitx.com/images/common/back.gif
呵呵,我现在觉得这是个多线程的问题。现在把程序编译成了几个单独的文件,笨方法解决 回复 7# 222222
没有十全十美的组件哈,好奇的是你做的什么程序
页:
[1]