Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Уничтожение потоков / 9 сообщений из 9, страница 1 из 1
25.03.2021, 00:19
    #40056752
Ildar007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уничтожение потоков
Хочу уничтожить потоки. Не получается уничтожить потоки при достижении определенного значения. Программа сначала выполняет главный поток поток, потом переходит к дополнительным

Если в методе Execute пишу
MyArrayThread[i].Terminate или FreeOnTerminate то программа выводит ошибку.

Код: 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.
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Classes,
  Winapi.Windows,
  System.Threading;


type
  TOneClassTthread = class(TThread)
  protected
    procedure Execute; override;
  end;



var
  SI: TSystemInfo;
  MyArrayThread: array [0..10] of TOneClassTthread;
  I: Integer;
  A: Integer;
{ TOneClassTthread }

procedure TOneClassTthread.Execute;
begin
  inherited
  sleep(200);
  A := A + 1;

  if Terminated then
  MyArrayThread[i].Free;

  Synchronize(procedure
  begin
    Writeln('qewe')
  end);

end;

begin
  try
    { TODO -oUser -cConsole Main : Insert code here }

    // определить количество ядер процессора
    I:= System.CPUCount;
    Writeln(IntToStr(I));
    // ограничение максимального количества потоков

    Writeln(IntToStr(2*I));

    // создание потоков

    A:= 0;

    for I := 0 to 2*System.CPUCount - 1 do
    begin
      MyArrayThread[i] := TOneClassTthread.Create(True);
      MyArrayThread[i].Priority := tpNormal;
    end;

    for I := 0 to 2*System.CPUCount - 1 do
    begin
      MyArrayThread[i].Start;
    end;

   { if A = 7 then
    begin
      for I := 0 to 2*System.CPUCount - 1 do
      begin
        MyArrayThread[i].Terminate;
      end;
      Writeln(IntToStr(A));
    end; }

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;

  end.
...
Рейтинг: 0 / 0
25.03.2021, 00:57
    #40056755
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уничтожение потоков
Ildar007,

Завершение потока - это выход из метода Execute. Только так. Это делает поцедура Exit.
...
Рейтинг: 0 / 0
25.03.2021, 01:01
    #40056756
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уничтожение потоков
И тебе уже сказали - Synchronize работать не будет. Твои потоки навечно виснут на Synchronize, и их не закрыть.

Закрыть поток извне (из другого потока) вызвать ОбъектПотока.Free. Два раза пробежаться в циклепо твоему массиву. Первый раз - сделать всем Terminate, 2-й раз - сделать всем Free. FreeOnTerminate не нужен ни в коем случае.
...
Рейтинг: 0 / 0
25.03.2021, 01:11
    #40056757
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уничтожение потоков
Ну и выкить, конечно, этот бред, вместе с Synchronize.

Ildar007

Код: pascal
1.
2.
  if Terminated then
  MyArrayThread[i].Free;

...
Рейтинг: 0 / 0
25.03.2021, 01:13
    #40056758
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уничтожение потоков
YuRock
Первый раз - сделать всем Terminate, 2-й раз - сделать всем Free..
Можно и один раз - сразу Free. Это на будущее - так лучше делать (в два этапа), когда список потоков убиваешь.
...
Рейтинг: 0 / 0
25.03.2021, 08:36
    #40056784
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уничтожение потоков
Напишите, пожалуйста, кто-нибудь компонент "Убить все потоки".
...
Рейтинг: 0 / 0
25.03.2021, 08:42
    #40056785
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уничтожение потоков
ъъъъъ
Напишите, пожалуйста, кто-нибудь компонент "Убить все потоки".

Halt
...
Рейтинг: 0 / 0
25.03.2021, 10:34
    #40056803
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уничтожение потоков
Синхронайз в консоли просто так не работает
...
Рейтинг: 0 / 0
25.03.2021, 13:38
    #40056867
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уничтожение потоков
И самое замечательное, что в консоли он напрочь не нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Уничтожение потоков / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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