Delphi InternetSetOption中的连接超时不起作用

Delphi InternetSetOption中的连接超时不起作用,delphi,Delphi,理论上,连接尝试应在5秒后终止。然而在实践中,我仍然得到无限的超时。有没有办法从外部终止连接。例如,我可以使用定时器,然后执行适当的函数中止。另一个令人讨厌的解决方法是使用TerminateThread函数触发线程并杀死它 function DownloadFile(URL, {User, Pass,} FileName: string): Boolean; const BufferSize = 1024; var hSession, hURL: HInternet; Buffer: a

理论上,连接尝试应在5秒后终止。然而在实践中,我仍然得到无限的超时。有没有办法从外部终止连接。例如,我可以使用定时器,然后执行适当的函数中止。另一个令人讨厌的解决方法是使用TerminateThread函数触发线程并杀死它

function DownloadFile(URL, {User, Pass,} FileName: string): Boolean;
const
  BufferSize = 1024;
var
 hSession, hURL: HInternet;
 Buffer: array[1..BufferSize] of Byte;
 BufferLen,Connect_timeout: DWORD;
 F: File;
 User,Pass:string;
begin
  User:='';
  Pass:='';

  Result := False;
  hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0) ;

  Connect_timeout := 5000 ;
  InternetSetOption(hSession, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@Connect_timeout), sizeof(Connect_timeout));

  // Establish the secure connection
  InternetConnect (
 hSession,
 PChar(URL),
 INTERNET_DEFAULT_HTTPS_PORT,
 PChar(User),
 PChar(Pass),
 INTERNET_SERVICE_HTTP,
 0,
 0
 );

try
    hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0) ;
try
  AssignFile(f, FileName);
  Rewrite(f,1);
  try
    repeat
      InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen) ;
      BlockWrite(f, Buffer, BufferLen)
    until BufferLen = 0;
  finally
    CloseFile(f) ;
    Result := True;
  end;
finally
  InternetCloseHandle(hURL)
end
finally
  InternetCloseHandle(hSession)
end;
end;

您没有提到操作需要很长时间才能超时,但我猜是在InternetReadFile,因为您没有设置INTERNET\u选项\u接收\u超时选项。但是,请关注,例如,查看MS在超时的情况下仍存在一些问题,无法找到英文链接的知识库文章,因此,这里是。好的。谢谢你的回答。我注意到另一个带有超时值的奇怪行为。不管我输入什么,超时总是需要12秒。可能重复的是,它不起作用。使用线程或Indy实现它。