Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > потоки зависают


Автор: RAIN666 24.7.2019, 10:21
Здравствуйте.
Код потока:
Код

procedure TMyThread.Execute;
var
  hInet, hUrl : HINTERNET;
begin
  inherited;
  hInet := InternetOpen(PChar('Mozilla 1.0'), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(hInet) then
  begin
    hUrl := InternetOpenUrl(hInet, PChar(url), nil, 0, INTERNET_FLAG_RELOAD, 0);
....bla-bla.....

Если запустить одновременно более двух таких потоков одновременно (с разными или одинаковыми url - не важно), то первые два выполнятся нормально, а остальные зависнут на строчке hUrl := InternetOpenUrl(hInet, PChar(url), nil, 0, INTERNET_FLAG_RELOAD, 0);  smile 
Почему?

Автор: Snowy 24.7.2019, 11:20
Количество подключений к одному серверу ограничено по умолчанию двумя.
Перед InternetOpenUrl нужно установить лимит количества подключений к одному серверу:
Код

 n := 10; // n: integer;
 InternetSetOption(hNet, 73, @n,sizeof(n));
 n := 10;
 InternetSetOption(hNet, 74, @n,sizeof(n));


Автор: RAIN666 24.7.2019, 12:27
оба вызова возвращают false во всех потоках.
Код

procedure TThreadDownload.Execute;
var
  i : Integer;
  hInet, hUrl : HINTERNET;
begin
  inherited;
  hInet := InternetOpen(PChar('Mozilla 1.0'), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(hInet) then
  begin
      i := 5;
      if not InternetSetOption(hInet, INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER, @i, SizeOf(i)) then
      MessageBox(0,'0','0',0);
      i := 5;
      if not InternetSetOption(hInet, INTERNET_OPTION_MAX_CONNS_PER_SERVER, @i, SizeOf(i)) then
      MessageBox(0,'1','1',0);

почему?

Автор: RAIN666 25.7.2019, 11:57
вчера методом тыка обнаружилось, что если вместо hInet написать nil - всё работает.
но почему надо писать именно nil?

Автор: Snowy 25.7.2019, 18:23
nil - глобальная настройка на любые подключения.
Вероятно именно эту опцию нельзя настроить точечно. Только глобально.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)