powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Потоки.. Несколько вопросов.
25 сообщений из 74, страница 2 из 3
Потоки.. Несколько вопросов.
    #39935680
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
X-Cite,

А у меня процессор может выполнять в двое больше, при двое меньшем количестве ядер

Ну вручную выставьте MaxWorkerThreads = 200.... Будет вам 200 задач...

DmSerCpu и Core в Вашей формуле что означают?

В System есть только переменная CPUCount (ей присваивается SysInfo.dwNumberOfProcessors), означающая количество логических ядер (Number of CPU Cores detected)
Cpu - физические процессоры
Core - ядра на них...
т.е. сервер состоящий из 4 процессоров по 6 ядер = 4 * 6 = 24 виртуальных процессоров = dwNumberOfProcessors = CPUCount
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935689
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погуглив нашёл пример, что нужно использовать критическую секцию, что бы потоки не обращались к одной и той же строке из Stringlist...
Но поток вообще не работает. Пример простой, пытаюсь в потоках достать из стринглиста строки, разделить на айпи-порт, и вставить результат в мемо.
Скажите пожалуйста, почему потоки не работают, что я не так сделал?

Код: 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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
  TMyThread = class(TThread)
  public
    MyIndex: Byte;
    IP,Port:string;
  protected
    procedure sync;
    procedure execute;
  end;

var
  Form1: TForm1;
  ProxyList: TStringList;
  ptk: array [1 .. 10] of TMyThread; // ПОТОКИ
  WORK: Boolean;  
  Proxy_tic: Integer; 
  CS: TCriticalSection; // КРИТИЧЕСКАЯ СЕКЦИЯ
  
  
  
  
  {Запуск потоков}
  var
  i: Integer;
begin
  WORK := True;
  Proxy_tic := -1; // переменной присваиваю -1, так как в потоке первым делом она Inc(), и будет ровняться 0
  for i := 1 to StrToInt(sTrackEdit1.Text) do // количество потоков
  begin
    ptk[i] := TMyThread.Create(True);
    ptk[i].FreeOnTerminate := True;
    ptk[i].Priority := tpNormal;
    ptk[i].Resume;
  end;
end;
  
  
  
  { TMyThread }

procedure TMyThread.execute;
var
  Position: Integer;
begin
  while WORK do
  begin
    Inc(Proxy_tic); // увеличиваю переменную
    CS.Enter; // крит секция
    if Proxy_tic < ProxyList.Count then // если переменная меньше чем строк в стринглисте
    begin
     MyIndex := Proxy_tic;  // присваиваю переменной потока нужное значение
    end
    else
    begin
      WORK := False;
    end;
    CS.Leave;

    Position := Pos('', ProxyList.Strings[MyIndex]);  // НАХОЖУ РАЗДЕЛИТЕЛЬ :  
     IP := Copy(ProxyList.Strings[MyIndex], 0, Position -1); //   БЕРУ АЙПИ 
     Port := Copy(ProxyList.Strings[MyIndex], Position +1, ProxyList.Strings[MyIndex].Length); // И ПОРТ
     Synchronize(sync);
  end;

end;

procedure TMyThread.sync;
begin
  Form1.sMemo1.Lines.Add(IntToStr(MyIndex) + IP + Port) ; 
end;
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935690
X-Cite

Ну вручную выставьте MaxWorkerThreads = 200.... Будет вам 200 задач...

...


У меня на 1 ядро, приходиться по 2 потока.


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
TThread.ProcessorCount : FProcessorCount := System.CPUCount; 

....
const MaxThreadsPerCPU = 25;

FMaxLimitWorkerThreadCount := TThread.ProcessorCount * MaxThreadsPerCPU;
....

function TThreadPool.SetMaxWorkerThreads(Value: Integer): Boolean;
begin
  Result := Value >= TThread.ProcessorCount;
  if Result then
    TInterlocked.Exchange(FMaxLimitWorkerThreadCount, Value);
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
   MaxThreadsPerCPU = 25;
    // Constants used for calculating CPU Usage
    CPUUsageHigh = 95; // Start retiring/removing threads when CPU usage gets this high
    CPUUsageLow = 80; // Add more threads if the CPU usage is below this
    CPUUsageLowest = 20; // Shrink the thread pool when CPU usage falls below this
    NumCPUUsageSamples = 10; // Keep a running list of CPU Usage samples over which the average is calculated
    MonitorThreadDelay = 500;
    SuspendInterval = 5000 + MonitorThreadDelay; // Interval to use for suspending work in worker threads
    SuspendTime = MonitorThreadDelay + 100; // Time to spend in SuspendWork;
    RetirementDelay = 5000; // Delay interval for retiring threads

...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935694
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9ne,

Вам же сказали, что для решения вашей задачи не нужно использовать голые потоки...
Намного проще и красивее будет использовать Таски...
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935698
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
Tech N9ne,

Вам же сказали, что для решения вашей задачи не нужно использовать голые потоки...
Намного проще и красивее будет использовать Таски...

Хорошо, пусть таски, но я же должен понять, почему у меня не работают потоки. Иначе как мне учится на ошибках?)
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935723
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9ne
Хорошо, пусть таски, но я же должен понять, почему у меня не работают потоки. Иначе как мне учится на ошибках?)
Вам бы для начала прочитать что тут уже написано, включая ссылки.
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935726
Tech N9ne,
Во первых из потока нельзя обращаться к компонентам. В третьих ты не распределяешь данные между потоками.

Вот краткий пример



Код: 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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Threading, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    procedure NewThread(const s: TStrings; Index, Offset, Max: NativeUInt);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.NewThread(const s: TStrings; Index, Offset, Max: NativeUInt);
  function GetOffsetStings(): TArray<string>;
  var
    i: NativeUInt;
  begin
    SetLength(Result, Max);
    for i := 0 to Max - 1 do
      Result[i] := s.Strings[Offset + i];
  end;

var
  Arr: TArray<string>;
  i: Integer;
begin
  Arr := GetOffsetStings();

  Memo3.Lines.Add('Thread ' + Index.ToString + ' lines : ');
  for i := Low(Arr) to High(Arr) do
    Memo3.Lines.Add(Arr[i]);
  Memo3.Lines.Add('');

  TThread.CreateAnonymousThread(
    procedure()
    var
      i: Cardinal;
    begin
      for i := Low(Arr) to High(Arr) do
      begin
        TThread.Synchronize(nil,
          procedure
            procedure parseIp(const s: string; out ip, port: string);
            var
              i: Integer;
              b: Boolean;
            begin
              b := false;
              for i := Low(s) to High(s) do
              begin
                if not b then
                  if s[i] = ':' then
                  begin
                    b := true;
                    continue;
                  end;

                if b then
                   port := port + s[i]
                 else
                   ip := ip + s[i];
               end;
             end;
          var
            ip, port: string;
          begin
            parseIp(Arr[i], ip, port);
            Memo2.Lines.Add(' Thread - ' + Index.ToString + ' = ' + ip + ':' + port);
          end);
      end;

    end).start;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i, rest, num, sum, count, NumThreads: Integer;
begin
  NumThreads := 8;

  num := Memo1.Lines.count;
  rest := num mod NumThreads;
  sum := num - rest;

  count := sum div NumThreads;

  for i := 0 to NumThreads - 1 do
  begin
    dec(sum, count);

    NewThread(Memo1.Lines, i, i * count, count);

    if (sum <= 0) and (rest >= 1) then
      NewThread(Memo1.Lines, i + 1, (i * count) + count, rest);
  end;
end;

end.



На вход
Memo1
Код: sql
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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
246.152.137.89:2012
18.197.250.246:5569
90.75.62.52:5740
15.196.162.148:1453
152.80.85.207:7255
225.242.148.30:6496
165.86.207.13:8129
71.247.18.36:6695
85.120.199.139:7905
118.248.215.181:8197
187.49.246.14:4233
223.37.173.46:5854
110.222.57.40:3929
230.65.168.71:6427
33.50.110.139:7909
238.165.4.197:4998
232.217.116.10:3714
69.69.91.247:3993
221.15.38.69:4244
204.166.232.26:3219
151.126.80.222:7722
133.49.43.180:3277
4.102.131.119:7826
111.159.99.90:5308
184.117.125.112:5145
226.250.195.201:4020
182.210.114.32:2521
194.144.15.175:8174
125.161.152.157:1466
221.158.98.172:3973
105.75.231.245:4692
41.4.57.160:6013
187.219.244.67:8834
190.198.178.105:8975
138.54.204.148:1483
135.16.15.107:4539
101.8.205.218:7633
41.77.211.116:6985
137.63.40.243:8241
112.65.239.49:8349
221.124.5.61:4931
33.47.19.49:6924
200.111.101.98:6018
0.48.10.55:1874
45.41.73.232:2605
234.221.244.86:7956
172.93.248.93:5389
122.108.101.90:5721
8.116.122.87:6327
210.254.98.82:2229
31.131.147.82:1566
38.149.113.27:2927
104.221.129.39:7915
10.38.190.116:1289
231.86.207.171:5513
32.101.158.50:8906
32.191.148.208:2462
110.63.74.72:1399
167.249.128.45:8266
43.71.188.72:7661
190.7.224.17:2363
244.14.44.67:4514
131.253.109.136:3923
5.98.208.59:3054
246.44.118.62:4726
96.137.78.130:7030
101.32.101.97:8327
23.57.237.33:6212
54.100.34.149:3002
66.108.128.195:3555
245.6.108.124:3552
142.20.80.29:2729
157.197.224.163:2518
196.15.222.12:7911
162.172.45.54:5398
83.7.181.61:4386
160.77.254.255:6286
241.104.222.39:6230
23.122.79.185:7959
175.93.139.59:1249
189.222.139.217:1163
81.138.204.3:6295
53.0.188.240:1131
181.139.169.64:5710
119.250.193.22:7074
222.110.147.21:8809
24.143.76.33:5756
49.252.241.14:8757
171.26.201.91:2231
222.36.129.137:2738
90.89.126.74:2225
73.60.43.162:5157
51.145.13.2:3110
161.52.157.67:6252
55.111.109.196:5283
211.178.123.209:5720
161.193.179.175:6777
188.150.69.240:1046
223.238.33.146:8986
234.143.67.216:6029




На выводе будет

Memo3
Код: sql
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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
Thread 0 lines : 
246.152.137.89:2012
18.197.250.246:5569
90.75.62.52:5740
15.196.162.148:1453
152.80.85.207:7255
225.242.148.30:6496
165.86.207.13:8129
71.247.18.36:6695
85.120.199.139:7905
118.248.215.181:8197
187.49.246.14:4233
223.37.173.46:5854

Thread 1 lines : 
110.222.57.40:3929
230.65.168.71:6427
33.50.110.139:7909
238.165.4.197:4998
232.217.116.10:3714
69.69.91.247:3993
221.15.38.69:4244
204.166.232.26:3219
151.126.80.222:7722
133.49.43.180:3277
4.102.131.119:7826
111.159.99.90:5308

Thread 2 lines : 
184.117.125.112:5145
226.250.195.201:4020
182.210.114.32:2521
194.144.15.175:8174
125.161.152.157:1466
221.158.98.172:3973
105.75.231.245:4692
41.4.57.160:6013
187.219.244.67:8834
190.198.178.105:8975
138.54.204.148:1483
135.16.15.107:4539

Thread 3 lines : 
101.8.205.218:7633
41.77.211.116:6985
137.63.40.243:8241
112.65.239.49:8349
221.124.5.61:4931
33.47.19.49:6924
200.111.101.98:6018
0.48.10.55:1874
45.41.73.232:2605
234.221.244.86:7956
172.93.248.93:5389
122.108.101.90:5721

Thread 4 lines : 
8.116.122.87:6327
210.254.98.82:2229
31.131.147.82:1566
38.149.113.27:2927
104.221.129.39:7915
10.38.190.116:1289
231.86.207.171:5513
32.101.158.50:8906
32.191.148.208:2462
110.63.74.72:1399
167.249.128.45:8266
43.71.188.72:7661

Thread 5 lines : 
190.7.224.17:2363
244.14.44.67:4514
131.253.109.136:3923
5.98.208.59:3054
246.44.118.62:4726
96.137.78.130:7030
101.32.101.97:8327
23.57.237.33:6212
54.100.34.149:3002
66.108.128.195:3555
245.6.108.124:3552
142.20.80.29:2729

Thread 6 lines : 
157.197.224.163:2518
196.15.222.12:7911
162.172.45.54:5398
83.7.181.61:4386
160.77.254.255:6286
241.104.222.39:6230
23.122.79.185:7959
175.93.139.59:1249
189.222.139.217:1163
81.138.204.3:6295
53.0.188.240:1131
181.139.169.64:5710

Thread 7 lines : 
119.250.193.22:7074
222.110.147.21:8809
24.143.76.33:5756
49.252.241.14:8757
171.26.201.91:2231
222.36.129.137:2738
90.89.126.74:2225
73.60.43.162:5157
51.145.13.2:3110
161.52.157.67:6252
55.111.109.196:5283
211.178.123.209:5720

Thread 8 lines : 
161.193.179.175:6777
188.150.69.240:1046
223.238.33.146:8986
234.143.67.216:6029



Memo2
Код: sql
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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
 Thread - 0 = 246.152.137.89:2012
 Thread - 1 = 110.222.57.40:3929
 Thread - 2 = 184.117.125.112:5145
 Thread - 3 = 101.8.205.218:7633
 Thread - 4 = 8.116.122.87:6327
 Thread - 5 = 190.7.224.17:2363
 Thread - 6 = 157.197.224.163:2518
 Thread - 7 = 119.250.193.22:7074
 Thread - 8 = 161.193.179.175:6777
 Thread - 0 = 18.197.250.246:5569
 Thread - 1 = 230.65.168.71:6427
 Thread - 2 = 226.250.195.201:4020
 Thread - 3 = 41.77.211.116:6985
 Thread - 4 = 210.254.98.82:2229
 Thread - 5 = 244.14.44.67:4514
 Thread - 6 = 196.15.222.12:7911
 Thread - 7 = 222.110.147.21:8809
 Thread - 8 = 188.150.69.240:1046
 Thread - 0 = 90.75.62.52:5740
 Thread - 1 = 33.50.110.139:7909
 Thread - 2 = 182.210.114.32:2521
 Thread - 3 = 137.63.40.243:8241
 Thread - 4 = 31.131.147.82:1566
 Thread - 5 = 131.253.109.136:3923
 Thread - 6 = 162.172.45.54:5398
 Thread - 7 = 24.143.76.33:5756
 Thread - 8 = 223.238.33.146:8986
 Thread - 0 = 15.196.162.148:1453
 Thread - 1 = 238.165.4.197:4998
 Thread - 2 = 194.144.15.175:8174
 Thread - 3 = 112.65.239.49:8349
 Thread - 4 = 38.149.113.27:2927
 Thread - 5 = 5.98.208.59:3054
 Thread - 6 = 83.7.181.61:4386
 Thread - 7 = 49.252.241.14:8757
 Thread - 8 = 234.143.67.216:6029
 Thread - 0 = 152.80.85.207:7255
 Thread - 1 = 232.217.116.10:3714
 Thread - 2 = 125.161.152.157:1466
 Thread - 3 = 221.124.5.61:4931
 Thread - 4 = 104.221.129.39:7915
 Thread - 5 = 246.44.118.62:4726
 Thread - 6 = 160.77.254.255:6286
 Thread - 7 = 171.26.201.91:2231
 Thread - 0 = 225.242.148.30:6496
 Thread - 1 = 69.69.91.247:3993
 Thread - 2 = 221.158.98.172:3973
 Thread - 3 = 33.47.19.49:6924
 Thread - 4 = 10.38.190.116:1289
 Thread - 5 = 96.137.78.130:7030
 Thread - 6 = 241.104.222.39:6230
 Thread - 7 = 222.36.129.137:2738
 Thread - 0 = 165.86.207.13:8129
 Thread - 1 = 221.15.38.69:4244
 Thread - 2 = 105.75.231.245:4692
 Thread - 3 = 200.111.101.98:6018
 Thread - 4 = 231.86.207.171:5513
 Thread - 5 = 101.32.101.97:8327
 Thread - 6 = 23.122.79.185:7959
 Thread - 7 = 90.89.126.74:2225
 Thread - 0 = 71.247.18.36:6695
 Thread - 1 = 204.166.232.26:3219
 Thread - 2 = 41.4.57.160:6013
 Thread - 3 = 0.48.10.55:1874
 Thread - 4 = 32.101.158.50:8906
 Thread - 5 = 23.57.237.33:6212
 Thread - 6 = 175.93.139.59:1249
 Thread - 7 = 73.60.43.162:5157
 Thread - 0 = 85.120.199.139:7905
 Thread - 1 = 151.126.80.222:7722
 Thread - 2 = 187.219.244.67:8834
 Thread - 3 = 45.41.73.232:2605
 Thread - 4 = 32.191.148.208:2462
 Thread - 5 = 54.100.34.149:3002
 Thread - 6 = 189.222.139.217:1163
 Thread - 7 = 51.145.13.2:3110
 Thread - 0 = 118.248.215.181:8197
 Thread - 1 = 133.49.43.180:3277
 Thread - 2 = 190.198.178.105:8975
 Thread - 3 = 234.221.244.86:7956
 Thread - 4 = 110.63.74.72:1399
 Thread - 5 = 66.108.128.195:3555
 Thread - 6 = 81.138.204.3:6295
 Thread - 7 = 161.52.157.67:6252
 Thread - 0 = 187.49.246.14:4233
 Thread - 1 = 4.102.131.119:7826
 Thread - 2 = 138.54.204.148:1483
 Thread - 3 = 172.93.248.93:5389
 Thread - 4 = 167.249.128.45:8266
 Thread - 5 = 245.6.108.124:3552
 Thread - 6 = 53.0.188.240:1131
 Thread - 7 = 55.111.109.196:5283
 Thread - 0 = 223.37.173.46:5854
 Thread - 1 = 111.159.99.90:5308
 Thread - 2 = 135.16.15.107:4539
 Thread - 3 = 122.108.101.90:5721
 Thread - 4 = 43.71.188.72:7661
 Thread - 5 = 142.20.80.29:2729
 Thread - 6 = 181.139.169.64:5710
 Thread - 7 = 211.178.123.209:5720

...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935736
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный,

Какой ужас. У вас все засинхронизировпно. О какой параллельности может идти речь. Это яркий пример как делать не нужно...
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935739
X-Cite,

Неверно. По результатам можно просмотреть что всё идёт синхронизировано. Конечно же функцию parseIp надо убрать в функцию вложения потока. Но в принципе для примера очень годный пример.
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935740
X-Cite,

Грубо говоря в этом топике, все льют воду, не смотря на счётчик. Не объясняя тс-у как правильно работать с данными в потоке, как ичто передавать. Как и что возвращать.


Изначально он создал ведь тему, из за того что не понимал как массив- стринг передать в поток. И так далее.
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935743
X-Cite,

вы думаете это я так красиво ручками оформил Для форума ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
 Thread - 0 = 15.196.162.148:1453
 Thread - 1 = 238.165.4.197:4998
 Thread - 2 = 194.144.15.175:8174
 Thread - 3 = 112.65.239.49:8349
 Thread - 4 = 38.149.113.27:2927
 Thread - 5 = 5.98.208.59:3054
 Thread - 6 = 83.7.181.61:4386
 Thread - 7 = 49.252.241.14:8757
 Thread - 8 = 234.143.67.216:6029



Нет, увы. Это он синхронно отработал все потоки.
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935746
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
ВсеРазумный,

Какой ужас. У вас все засинхронизировпно. О какой параллельности может идти речь. Это яркий пример как делать не нужно...


К сожалению, сейчас в интернете очень сложно найти нормальные статьи по многопоточному программированию в Delphi, зато примеров таких шедевров полно.
Есть Тейксейра с Пачекой, но там лишь основы. Видимо, этого сегодня недостаточно.

Грустно :(
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935748
DmSer,

А вы пользуетесь логикой - лучше воду лить? Давайте, приведите правильный пример. Хотя если бы могли,давно привели.
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935749
Вы хоть то сами понимаете суть потоков ? Смысла потока запустить, обработать какие - то данные. И вернуть данные в главный поток.


Нет, вы этого не понимаете. Не понимаете что все потоки работают синхронно. Что свидетельствует опять же вывод




ВсеРазумный
X-Cite,

вы думаете это я так красиво ручками оформил Для форума ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
 Thread - 0 = 15.196.162.148:1453
 Thread - 1 = 238.165.4.197:4998
 Thread - 2 = 194.144.15.175:8174
 Thread - 3 = 112.65.239.49:8349
 Thread - 4 = 38.149.113.27:2927
 Thread - 5 = 5.98.208.59:3054
 Thread - 6 = 83.7.181.61:4386
 Thread - 7 = 49.252.241.14:8757
 Thread - 8 = 234.143.67.216:6029



Нет, увы. Это он синхронно отработал все потоки.
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935751
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Не понимаете что все потоки работают синхронно.
Не все. Только потоки "избранных".
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935752
YuRock,

Не смеши мои носки

Код: 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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Threading, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    procedure NewThread(const s: TStrings; Index, Offset, Max: NativeUInt);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.NewThread(const s: TStrings; Index, Offset, Max: NativeUInt);
  function GetOffsetStings(): TArray<string>;
  var
    i: NativeUInt;
  begin
    SetLength(Result, Max);
    for i := 0 to Max - 1 do
      Result[i] := s.Strings[Offset + i];
  end;

var
  Arr: TArray<string>;
  i: Integer;
begin
  Arr := GetOffsetStings();

  Memo3.Lines.Add('Thread ' + Index.ToString + ' lines : ');
  for i := Low(Arr) to High(Arr) do
    Memo3.Lines.Add(Arr[i]);
  Memo3.Lines.Add('');

  TThread.CreateAnonymousThread(
    procedure()
    var
      i: Cardinal;
    begin
      for i := Low(Arr) to High(Arr) do
      begin
        TThread.Synchronize(nil,
          procedure procedure parseIp(const s: string; out ip, port: string);
          var
            i: Integer;
            b: Boolean;
          begin
            b := false;
            for i := Low(s) to High(s) do
            begin
              if not b then
                if s[i] = ':' then
                begin
                  b := true;
                  continue;
                end;

              if b then
                port := port + s[i]
              else
                ip := ip + s[i];
            end;
          end;
          var
            ip, port: string;
          begin
            parseIp(Arr[i], ip, port);
            Memo2.Lines.Add(TimeToStr(Time) + ' - ' + Index.ToString + ' = ' + ip + ':' + port);
          end);
      end;

    end).start;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i, rest, num, sum, count, NumThreads: Integer;
begin
  NumThreads := 8;

  num := Memo1.Lines.count;
  rest := num mod NumThreads;
  sum := num - rest;

  count := sum div NumThreads;

  for i := 0 to NumThreads - 1 do
  begin
    dec(sum, count);

    NewThread(Memo1.Lines, i, i * count, count);

    if (sum <= 0) and (rest >= 1) then
      NewThread(Memo1.Lines, i + 1, (i * count) + count, rest);
  end;
end;

end.




Код: sql
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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
23:41:55 - 0 = 246.152.137.89:2012
23:41:55 - 1 = 110.222.57.40:3929
23:41:55 - 2 = 184.117.125.112:5145
23:41:55 - 3 = 101.8.205.218:7633
23:41:55 - 4 = 8.116.122.87:6327
23:41:55 - 5 = 190.7.224.17:2363
23:41:55 - 6 = 157.197.224.163:2518
23:41:55 - 7 = 119.250.193.22:7074
23:41:55 - 8 = 161.193.179.175:6777
23:41:55 - 0 = 18.197.250.246:5569
23:41:55 - 1 = 230.65.168.71:6427
23:41:55 - 2 = 226.250.195.201:4020
23:41:55 - 3 = 41.77.211.116:6985
23:41:55 - 4 = 210.254.98.82:2229
23:41:55 - 5 = 244.14.44.67:4514
23:41:55 - 6 = 196.15.222.12:7911
23:41:55 - 7 = 222.110.147.21:8809
23:41:55 - 8 = 188.150.69.240:1046
23:41:55 - 0 = 90.75.62.52:5740
23:41:55 - 1 = 33.50.110.139:7909
23:41:55 - 2 = 182.210.114.32:2521
23:41:55 - 3 = 137.63.40.243:8241
23:41:55 - 4 = 31.131.147.82:1566
23:41:55 - 5 = 131.253.109.136:3923
23:41:55 - 6 = 162.172.45.54:5398
23:41:55 - 7 = 24.143.76.33:5756
23:41:55 - 8 = 223.238.33.146:8986
23:41:55 - 0 = 15.196.162.148:1453
23:41:55 - 1 = 238.165.4.197:4998
23:41:55 - 2 = 194.144.15.175:8174
23:41:55 - 3 = 112.65.239.49:8349
23:41:55 - 4 = 38.149.113.27:2927
23:41:55 - 5 = 5.98.208.59:3054
23:41:55 - 6 = 83.7.181.61:4386
23:41:55 - 7 = 49.252.241.14:8757
23:41:55 - 8 = 234.143.67.216:6029
23:41:55 - 0 = 152.80.85.207:7255
23:41:55 - 1 = 232.217.116.10:3714
23:41:55 - 2 = 125.161.152.157:1466
23:41:55 - 3 = 221.124.5.61:4931
23:41:55 - 4 = 104.221.129.39:7915
23:41:55 - 5 = 246.44.118.62:4726
23:41:55 - 6 = 160.77.254.255:6286
23:41:55 - 7 = 171.26.201.91:2231
23:41:55 - 0 = 225.242.148.30:6496
23:41:55 - 1 = 69.69.91.247:3993
23:41:55 - 2 = 221.158.98.172:3973
23:41:55 - 3 = 33.47.19.49:6924
23:41:55 - 4 = 10.38.190.116:1289
23:41:55 - 5 = 96.137.78.130:7030
23:41:55 - 6 = 241.104.222.39:6230
23:41:55 - 7 = 222.36.129.137:2738
23:41:55 - 0 = 165.86.207.13:8129
23:41:55 - 1 = 221.15.38.69:4244
23:41:55 - 2 = 105.75.231.245:4692
23:41:55 - 3 = 200.111.101.98:6018
23:41:55 - 4 = 231.86.207.171:5513
23:41:55 - 5 = 101.32.101.97:8327
23:41:55 - 6 = 23.122.79.185:7959
23:41:55 - 7 = 90.89.126.74:2225
23:41:55 - 0 = 71.247.18.36:6695
23:41:55 - 1 = 204.166.232.26:3219
23:41:55 - 2 = 41.4.57.160:6013
23:41:55 - 3 = 0.48.10.55:1874
23:41:55 - 4 = 32.101.158.50:8906
23:41:55 - 5 = 23.57.237.33:6212
23:41:55 - 6 = 175.93.139.59:1249
23:41:55 - 7 = 73.60.43.162:5157
23:41:55 - 0 = 85.120.199.139:7905
23:41:55 - 1 = 151.126.80.222:7722
23:41:55 - 2 = 187.219.244.67:8834
23:41:55 - 3 = 45.41.73.232:2605
23:41:55 - 4 = 32.191.148.208:2462
23:41:55 - 5 = 54.100.34.149:3002
23:41:55 - 6 = 189.222.139.217:1163
23:41:55 - 7 = 51.145.13.2:3110
23:41:55 - 0 = 118.248.215.181:8197
23:41:55 - 1 = 133.49.43.180:3277
23:41:55 - 2 = 190.198.178.105:8975
23:41:55 - 3 = 234.221.244.86:7956
23:41:55 - 4 = 110.63.74.72:1399
23:41:55 - 5 = 66.108.128.195:3555
23:41:55 - 6 = 81.138.204.3:6295
23:41:55 - 7 = 161.52.157.67:6252
23:41:55 - 0 = 187.49.246.14:4233
23:41:55 - 1 = 4.102.131.119:7826
23:41:55 - 2 = 138.54.204.148:1483
23:41:55 - 3 = 172.93.248.93:5389
23:41:55 - 4 = 167.249.128.45:8266
23:41:55 - 5 = 245.6.108.124:3552
23:41:55 - 6 = 53.0.188.240:1131
23:41:55 - 7 = 55.111.109.196:5283
23:41:55 - 0 = 223.37.173.46:5854
23:41:55 - 1 = 111.159.99.90:5308
23:41:55 - 2 = 135.16.15.107:4539
23:41:55 - 3 = 122.108.101.90:5721
23:41:55 - 4 = 43.71.188.72:7661
23:41:55 - 5 = 142.20.80.29:2729
23:41:55 - 6 = 181.139.169.64:5710
23:41:55 - 7 = 211.178.123.209:5720
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935753
Я подумал глупо выводит в секундах, выведем всё и целиком ! Что бы было нагляднее

Код: 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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Threading, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    procedure NewThread(const s: TStrings; Index, Offset, Max: NativeUInt);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.NewThread(const s: TStrings; Index, Offset, Max: NativeUInt);
  function GetOffsetStings(): TArray<string>;
  var
    i: NativeUInt;
  begin
    SetLength(Result, Max);
    for i := 0 to Max - 1 do
      Result[i] := s.Strings[Offset + i];
  end;

var
  Arr: TArray<string>;
  i: Integer;
begin
  Arr := GetOffsetStings();

  Memo3.Lines.Add('Thread ' + Index.ToString + ' lines : ');
  for i := Low(Arr) to High(Arr) do
    Memo3.Lines.Add(Arr[i]);
  Memo3.Lines.Add('');

  TThread.CreateAnonymousThread(
    procedure()
    var
      i: Cardinal;
    begin
      for i := Low(Arr) to High(Arr) do
      begin
        TThread.Synchronize(nil,
          procedure procedure parseIp(const s: string; out ip, port: string);
          var
            i: Integer;
            b: Boolean;
          begin
            b := false;
            for i := Low(s) to High(s) do
            begin
              if not b then
                if s[i] = ':' then
                begin
                  b := true;
                  continue;
                end;

              if b then
                port := port + s[i]
              else
                ip := ip + s[i];
            end;
          end;
          var
            ip, port: string;
          begin
            parseIp(Arr[i], ip, port);
            Memo2.Lines.Add(Double(Time).ToString + ' - ' + Index.ToString + ' = ' + ip + ':' + port);
          end);
      end;

    end).start;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i, rest, num, sum, count, NumThreads: Integer;
begin
  NumThreads := 8;

  num := Memo1.Lines.count;
  rest := num mod NumThreads;
  sum := num - rest;

  count := sum div NumThreads;

  for i := 0 to NumThreads - 1 do
  begin
    dec(sum, count);

    NewThread(Memo1.Lines, i, i * count, count);

    if (sum <= 0) and (rest >= 1) then
      NewThread(Memo1.Lines, i + 1, (i * count) + count, rest);
  end;
end;

end.




Код: sql
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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
0,988730868055556 - 0 = 246.152.137.89:2012
0,988730868055556 - 1 = 110.222.57.40:3929
0,988730868055556 - 2 = 184.117.125.112:5145
0,988730868055556 - 3 = 101.8.205.218:7633
0,988730868055556 - 4 = 8.116.122.87:6327
0,988730868055556 - 5 = 190.7.224.17:2363
0,988730868055556 - 6 = 157.197.224.163:2518
0,988730868055556 - 7 = 119.250.193.22:7074

0,988731053240741 - 8 = 161.193.179.175:6777
0,988731053240741 - 0 = 18.197.250.246:5569
0,988731053240741 - 1 = 230.65.168.71:6427
0,988731053240741 - 2 = 226.250.195.201:4020

0,988731134259259 - 3 = 41.77.211.116:6985
0,988731134259259 - 4 = 210.254.98.82:2229
0,988731134259259 - 5 = 244.14.44.67:4514
0,988731134259259 - 6 = 196.15.222.12:7911
0,988731134259259 - 7 = 222.110.147.21:8809
0,988731134259259 - 8 = 188.150.69.240:1046
0,988731134259259 - 0 = 90.75.62.52:5740

0,988731319444444 - 1 = 33.50.110.139:7909
0,988731319444444 - 2 = 182.210.114.32:2521
0,988731319444444 - 3 = 137.63.40.243:8241
0,988731319444444 - 4 = 31.131.147.82:1566
0,988731319444444 - 5 = 131.253.109.136:3923

0,988731493055556 - 6 = 162.172.45.54:5398
0,988731493055556 - 7 = 24.143.76.33:5756
0,988731493055556 - 8 = 223.238.33.146:8986
0,988731493055556 - 0 = 15.196.162.148:1453
0,988731493055556 - 1 = 238.165.4.197:4998
0,988731493055556 - 2 = 194.144.15.175:8174

0,988731678240741 - 3 = 112.65.239.49:8349
0,988731678240741 - 4 = 38.149.113.27:2927
0,988731678240741 - 5 = 5.98.208.59:3054
0,988731678240741 - 6 = 83.7.181.61:4386
0,988731678240741 - 7 = 49.252.241.14:8757

0,988731851851852 - 8 = 234.143.67.216:6029
0,988731851851852 - 0 = 152.80.85.207:7255

0,988732037037037 - 1 = 232.217.116.10:3714
0,988732037037037 - 2 = 125.161.152.157:1466
0,988732037037037 - 3 = 221.124.5.61:4931
0,988732037037037 - 4 = 104.221.129.39:7915

0,988732222222222 - 5 = 246.44.118.62:4726
0,988732222222222 - 6 = 160.77.254.255:6286
0,988732222222222 - 7 = 171.26.201.91:2231

0,988732291666667 - 0 = 225.242.148.30:6496
0,988732291666667 - 1 = 69.69.91.247:3993
0,988732291666667 - 2 = 221.158.98.172:3973
0,988732291666667 - 3 = 33.47.19.49:6924
0,988732291666667 - 4 = 10.38.190.116:1289

0,988732476851852 - 5 = 96.137.78.130:7030
0,988732476851852 - 6 = 241.104.222.39:6230
0,988732476851852 - 7 = 222.36.129.137:2738
0,988732476851852 - 0 = 165.86.207.13:8129
0,988732476851852 - 1 = 221.15.38.69:4244

0,988732662037037 - 2 = 105.75.231.245:4692
0,988732662037037 - 3 = 200.111.101.98:6018
0,988732662037037 - 4 = 231.86.207.171:5513
0,988732662037037 - 5 = 101.32.101.97:8327
0,988732662037037 - 6 = 23.122.79.185:7959
0,988732662037037 - 7 = 90.89.126.74:2225

0,988732835648148 - 0 = 71.247.18.36:6695
0,988732835648148 - 1 = 204.166.232.26:3219
0,988732835648148 - 2 = 41.4.57.160:6013
0,988732835648148 - 3 = 0.48.10.55:1874
0,988732835648148 - 4 = 32.101.158.50:8906

0,988733020833333 - 5 = 23.57.237.33:6212
0,988733020833333 - 6 = 175.93.139.59:1249
0,988733020833333 - 7 = 73.60.43.162:5157
0,988733020833333 - 0 = 85.120.199.139:7905
0,988733020833333 - 1 = 151.126.80.222:7722

0,988733206018519 - 2 = 187.219.244.67:8834
0,988733206018519 - 3 = 45.41.73.232:2605
0,988733206018519 - 4 = 32.191.148.208:2462
0,988733206018519 - 5 = 54.100.34.149:3002
0,988733206018519 - 6 = 189.222.139.217:1163
0,988733206018519 - 7 = 51.145.13.2:3110

0,98873337962963 - 0 = 118.248.215.181:8197
0,98873337962963 - 1 = 133.49.43.180:3277

0,988733460648148 - 2 = 190.198.178.105:8975
0,988733460648148 - 3 = 234.221.244.86:7956
0,988733460648148 - 4 = 110.63.74.72:1399
0,988733460648148 - 5 = 66.108.128.195:3555
0,988733460648148 - 6 = 81.138.204.3:6295

0,988733645833333 - 7 = 161.52.157.67:6252
0,988733645833333 - 0 = 187.49.246.14:4233
0,988733645833333 - 1 = 4.102.131.119:7826
0,988733645833333 - 2 = 138.54.204.148:1483
0,988733645833333 - 3 = 172.93.248.93:5389
0,988733645833333 - 4 = 167.249.128.45:8266

0,988733819444444 - 5 = 245.6.108.124:3552
0,988733819444444 - 6 = 53.0.188.240:1131
0,988733819444444 - 7 = 55.111.109.196:5283
0,988733819444444 - 0 = 223.37.173.46:5854
0,988733819444444 - 1 = 111.159.99.90:5308

0,98873400462963 - 2 = 135.16.15.107:4539
0,988734189814815 - 3 = 122.108.101.90:5721
0,988734363425926 - 4 = 43.71.188.72:7661
0,988734548611111 - 5 = 142.20.80.29:2729
0,98873462962963 - 6 = 181.139.169.64:5710
0,988734803240741 - 7 = 211.178.123.209:5720




Кое где не совсем точно, но это погрешность, ибо при нескольких запусках там может быть
Код: sql
1.
2.
3.
0,990460949074074 - 5 = 142.20.80.29:2729
0,990460949074074 - 6 = 181.139.169.64:5710
0,990460949074074 - 7 = 211.178.123.209:5720



А может и не может.
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935755
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
DmSer,

А вы пользуетесь логикой - лучше воду лить? Давайте, приведите правильный пример. Хотя если бы могли,давно привели.


Для Вас я приводить ничего не буду, Вы и сами все знаете лучше всех. С Архангельским небось знакомы.
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935756
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный


Нет, вы этого не понимаете. Не понимаете что все потоки работают синхронно.


Не понимаю...
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935757
DmSer,

Ну я вообще сомневаюсь, что вы что - то можете привести.

...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935760
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди, спасибо вам за помощь, за примеры...
Вы поймите, я хочу овладеть потоками... А вы мне таски предлагаете. Я впервые слышу о них.. Сейчас конечно почитал о них, что-то понял, что-то нет...
При всём уважении, ребята, вопрос не о том, чем лучше чекать прокси. Да сами прокси это просто пример.
Вопрос о потоках.
Помогите понять, почему потоки не работают? Что я конкретно делаю не так?
Код: 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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
 TMyThread = class(TThread)
  public
    MyIndex: Byte;
    IP,Port:string;
  protected
    procedure sync;
    procedure execute;
  end;

var
  Form1: TForm1;
  ProxyList: TStringList;
  ptk: array [1 .. 10] of TMyThread; // ПОТОКИ
  WORK: Boolean;  
  Proxy_tic: Integer; 
  CS: TCriticalSection; // КРИТИЧЕСКАЯ СЕКЦИЯ
  
  
  
  
  {Запуск потоков}
  var
  i: Integer;
begin
  WORK := True;
  Proxy_tic := -1; // переменной присваиваю -1, так как в потоке первым делом она Inc(), и будет ровняться 0
  for i := 1 to StrToInt(sTrackEdit1.Text) do // количество потоков
  begin
    ptk[i] := TMyThread.Create(True);
    ptk[i].FreeOnTerminate := True;
    ptk[i].Priority := tpNormal;
    ptk[i].Resume;
  end;
end;
  
  
  
  { TMyThread }

procedure TMyThread.execute;
var
  Position: Integer;
begin
  while WORK do
  begin
    Inc(Proxy_tic); // увеличиваю переменную
    CS.Enter; // крит секция
    if Proxy_tic < ProxyList.Count then // если переменная меньше чем строк в стринглисте
    begin
     MyIndex := Proxy_tic;  // присваиваю переменной потока нужное значение
    end
    else
    begin
      WORK := False;
    end;
    CS.Leave;

    Position := Pos(':', ProxyList.Strings[MyIndex]);  // НАХОЖУ РАЗДЕЛИТЕЛЬ :  
     IP := Copy(ProxyList.Strings[MyIndex], 0, Position -1); //   БЕРУ АЙПИ 
     Port := Copy(ProxyList.Strings[MyIndex], Position +1, ProxyList.Strings[MyIndex].Length); // И ПОРТ
     Synchronize(sync);
  end;

end;

procedure TMyThread.sync;
begin
  Form1.sMemo1.Lines.Add(IntToStr(MyIndex) + IP + Port) ; 
end;

...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935761
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9ne,

И что у вас не работает?
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935763
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Tech N9ne,

И что у вас не работает?

Тот код что выше, должен по моей логике в мемо добавлять строки. Номер строки, айпи и порт.
Но ничего не происходит.
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935764
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воспользоваться отладкой не предлогать? ;)

Брэйкпоинт оставить на старте .execute, например.
...
Рейтинг: 0 / 0
Потоки.. Несколько вопросов.
    #39935765
rgreat,

вставил его код, на втором цикле создания TMyThread выкидывает
Код: pascal
1.
2.
3.
4.
procedure AbstractErrorHandler;
begin
  raise EAbstractError.CreateRes(@SAbstractError);
end;




http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1392
...
Рейтинг: 0 / 0
25 сообщений из 74, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Потоки.. Несколько вопросов.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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