powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Многопоточное консольное приложение
6 сообщений из 6, страница 1 из 1
Многопоточное консольное приложение
    #39452573
azarenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Мне необходимо написать приложение, в котором будет запускаться 100 потоков и выполнять одинаковую задачу. Суть в том, что 100 потоков должны работать одновременно. Написал следующий код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
program sendRequest;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  IniFiles,
  Classes,
  SOAPHTTPTrans;
type
  TMyThread = class (TThread)
  protected
    procedure Execute; override;
  end;

procedure TMyThread.execute;
var
  Ini: TIniFile;
  host, xml: string;
  request: TStringList;
  Stream: TMemoryStream;
  soap: THTTPReqResp;
begin
  xml := 'test.xml';
  host := 'http://test.com';
  request := TStringList.Create;
  request.LoadFromFile(xml);
  Writeln(datetimetostr(now) + ' - Thread started!');
  Stream := TMemoryStream.Create;
  soap := THTTPReqResp.Create(nil);
  soap.Name := 'soap' + IntToStr(Random(10000));
  soap.URL := host;
  soap.InvokeOptions := [soIgnoreInvalidCerts,soAutoCheckAccessPointViaUDDI];
  soap.UseUTF8InHeader := True;
  while True do begin
    soap.Execute(request.Text, Stream);
    Writeln(datetimetostr(now) + ' - Request has been sent!');
  end;
  Stream.Free;
  soap.Free;
end;

var
  MyThread: TMyThread;
  i: Integer;
begin
  for i := 0 to 100 do begin
	  MyThread := TMyThread.Create(false);
    with MyThread do begin
      FreeOnTerminate := false;
      Resume;
    end;
  end;
  Readln;
end.


Проблема в том, что одновременно 100 потоков не работает, а как будто поочередно. При этом, в task manager пишется, что в программе задействовано 112 потоков. Прошу помощи!
...
Рейтинг: 0 / 0
Многопоточное консольное приложение
    #39452590
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Винда не поддерживает столько соединений. Сайт не поддерживает столько соединений. Роутер не поддерживает столько соединений.
...
Рейтинг: 0 / 0
Многопоточное консольное приложение
    #39452593
azarenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JaDi, если запустить несколько экземпляров программы, то нагрузка на сервер, на который идут запросы, возрастает.
...
Рейтинг: 0 / 0
Многопоточное консольное приложение
    #39452594
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azarenkoзадействовано 112 потоков.На 10 больше, чем в коде. Ставлю на то, что THTTPReqResp использует пул из 10 потоков, а остальные запросы ставит в очередь
...
Рейтинг: 0 / 0
Многопоточное консольное приложение
    #39452597
azarenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_, так они же создаются каждый в своем потоке. или я не понимаю чего-то?
...
Рейтинг: 0 / 0
Многопоточное консольное приложение
    #39452598
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azarenkoтак они же создаются каждый в своем потокеСоздаются. Но это не значит, что они изолированы. Каждый объект может использовать общий транспортный пул. Нужно смотреть исходники
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Многопоточное консольное приложение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]