powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Уничтожение потоков
9 сообщений из 9, страница 1 из 1
Уничтожение потоков
    #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
Уничтожение потоков
    #40056755
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ildar007,

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

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

Ildar007

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

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

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


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