找回密码
 加入
搜索
查看: 6706|回复: 7

[AU3基础] winhttp.winhttprequest的send后能否不用等待直接进行下一个步骤?

[复制链接]
发表于 2012-4-30 09:36:26 | 显示全部楼层 |阅读模式
悬赏8金钱未解决
最近编了一段代码,其中有一部分是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不支持多线程……

 楼主| 发表于 2012-4-30 14:20:56 | 显示全部楼层
我最初是希望send能像open一样有函数可以用的
$oHTTP.Open("POST", $Url)  这个语句如果加上参数false,也就是$oHTTP.Open("POST", $Url,False),那么不用等返回结果就可以进行下一步了  
原来希望Send有这个参数,但是现在基本已经认定没有这个参数了
Winhttp的Option我也看了,好像没有相关设置内容
 楼主| 发表于 2012-4-30 14:26:09 | 显示全部楼层
本帖最后由 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)设置的时间间隔
发表于 2012-4-30 19:09:07 | 显示全部楼层
本帖最后由 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

 楼主| 发表于 2012-4-30 19:18:28 | 显示全部楼层
回复 4# komaau3


    不行的,我试验过了。必须要等到send语句完整的执行完后才会执行。在send运行过程中,不能运行其它程序。这是adlib的特点决定的,在三楼我编写代码设置了一个测试环境,可以很清楚的看出来。
发表于 2012-4-30 19:29:08 | 显示全部楼层
本帖最后由 komaau3 于 2012-4-30 19:30 编辑

回复 5# 222222

亲。。。好奇你得send多大数据啊 ,设置send超时把,不然只能多进程了
 楼主| 发表于 2012-4-30 19:31:46 | 显示全部楼层
回复  222222

亲。。。好奇你得send多大数据啊 ,设置send超时把,不然只能多进程了
komaau3 发表于 2012-4-30 19:29



    呵呵,我现在觉得这是个多线程的问题。现在把程序编译成了几个单独的文件,笨方法解决
发表于 2012-4-30 19:36:02 | 显示全部楼层
回复 7# 222222

没有十全十美的组件哈,好奇的是你做的什么程序
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-13 21:10 , Processed in 0.077136 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表