关于Idhttp.Get方法我遇到了一些问题。我认为它在默认情况下是在阻塞模式下工作(等待答案转到下一行),但我只是看到它没有等待答案转到另一行。我正在使用它的线程,但我认为这不是问题。守则是:
PbxURL = http://www.biyiklikadin.com;
IdHTTP1:= TIdHttp.Create(Application);
IdHTTP1.ConnectTimeout:= 10000;
IdHTTP1.Request.Clear;
IdHTTP1.Request.BasicAuthentication:= true;
try
IdHTTP1.Get(PbxURL); **//this should STOP here and wait for answer don't?**
HttpCode:= IdHTTP1.ResponseCode;
except
on E: EIdHTTPProtocolException do
HttpCode := IdHTTP1.ResponseCode;
end;
if HttpCode=200 then
Memo1.Lines.Append('Kızlık Bozma');因此,我只注意到我没有得到正确的HttpCode值,因为在“Get”方法之后,它只是继续执行,而不等待“Get”完成。我该如何解决这个问题?
发布于 2016-01-02 11:35:41
印第是阻塞。来自可下载的文档这里 (Indy10.pdf):
Indy使用阻塞套接字调用。..。例如,要连接,只需调用connect方法并等待它返回。如果它成功了,它会在它成功的时候返回。如果失败,它将引发异常。
有人在评论中指出,TIdAntiFreeze可能会影响Indy呼叫的阻塞性质。又一次从医生那里:
Indy有一个特殊的组件,可以透明地解决用户界面冻结问题。只需在应用程序中的任何地方添加一个TIdAntiFreeze,您就可以在程序中执行标准阻塞Indy调用,而无需冻结用户界面。 TIdAntiFreeze的工作方式是内部超时对堆栈的调用,并在超时期间调用Application.ProcessMessages。对Indy的外部调用继续阻塞,因此在没有TIdAntiFreeze的情况下完全一样工作。使用TIdAntiFreeze允许阻塞套接字的所有优点,而不是最突出的缺点。
你的问题没有为进一步的分析提供足够的信息。
https://stackoverflow.com/questions/34563202
复制相似问题