powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ещё вопрос. TThread в Berlin 10.2
25 сообщений из 30, страница 1 из 2
Ещё вопрос. TThread в Berlin 10.2
    #39992733
st74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ. вопрос как принудительно пребить поток из главного приложения.

создаю поток по нажатию кнопки.

MyThread.Create(false);
а по нажатию другой надо его принудительно прибить.

на MyThread.Terminate; ругается. типа не знаю что енто такое.
хотя в TThread.pas FTerminate присутствует.

опятьже если можно - на пальцах. времени мало разбиратся. Помню на Delphi 7 делал. а в берлине ругается....

заодно еще вопрос можноли в поток передать данные при его создании.
типа как procedure(x, y : word);
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39992747
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st74
MyThread.Create(false);

Прямо так создается экземпляр класса? Из переменной?

Придется либо привести полный код, либо нанять программиста.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39992751
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st74
заодно еще вопрос можноли в поток передать данные при его создании.
типа как procedure(x, y : word);

Можно, разрешаю
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39992754
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st74вопрос как принудительно пребить поток из главного приложения.

Ответ: никак.
Ответ для ищущих геморроя: TerminateThread().

st74времени мало разбиратся.
Тогда забей на TThread, используй BeginThread. С одной функцией разобраться быстрее, чем с
целым классом.

st74еще вопрос можноли в поток передать данные при его создании.

Можно, разрешаю.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39992755
st74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сори. отвлекают. привожу код.

unit Unit2;

interface

uses
System.Classes, System.SysUtils, unit1;

type
MyThread = class(TThread)
private
x2 : uint32;
enablet : boolean;
procedure mpstat;
procedure mpstart;
procedure mpend;
procedure Tstop(inTS : boolean);
{ Private declarations }
protected
procedure Execute; override;
public


end;

implementation
ну и далее.

в Form1 по нажатию кнопки выполняется

MyThread.Create(false);
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39992773
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
st74
Помню на Delphi 7 делал

Врёшь.
...
"Прибить" - нельзя.
Код нити должен завершиться сам: либо по окончании выполнения задачи, либо по внешнему сигналу - получив сообщение, определив состояние флага и т.п.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39992789
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st74


в Form1 по нажатию кнопки выполняется

MyThread.Create(false);


Т.е. созданный поток Вы не сохраняете?
Тогда единственный способ с ним взаимодействовать - глобальная переменная, что плохо.
Про "тайные" соглашения о наименованиях типов и переменных хорошо бы ознакомиться.
Здраво:

TMyThread=class(TThread)
....

x:=TMyThread.Create(false)

После этого можно что-то делать, например:
x.Terminate;

Ректальный способ:
with TMyThread.Create(true) do
begin
FreeOnTerminate:=true;
Resume;
end;

В TMyThread.Execute проверять

if MyGlobalTerminateVar then exit;

после установки MyGlobalTerminateVar в true, все потоки должны завершиться и освободиться. Но это плохой способ.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39992823
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st74
заодно еще вопрос можноли в поток передать данные при его создании.
типа как procedure(x, y : word);


для этого надо попытаться почитать System.Classes, найти там страшные вещи типа TAnonymousThread и почитать, как оно сделано.
Потом можно вспомнить\почитать про общие поля\пропы класса, и их изменение снаружи. А TThread - это тоже класс, да.
Потом еще много чего можно почитать...
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39992832
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну отчего же?
глобальная переменная - вполне себе способ выставить флаг завершения работы потока.

А еще есть Event и Mutex, состояние которых можно отслеживать для прекращения работы
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993112
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
del
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993114
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Код нити должен завершиться сам: либо по окончании выполнения задачи, либо по внешнему сигналу - получив сообщение, определив состояние флага и т.п

сам так делаю, когда лень городить огород
Код: 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.
type
  TMyThread = class(TThread)
    private
    FIsAbortProcess: Boolean;
    ...
  publish
    property IsAbortProcess: Boolean read FIsAbortProcess write SetIsAbortProcess;
  ...
end;
...
procedure TMyThread.Execute;
begin
  try
    //если действия последовательны
    ...
    if IsAbortProcess then exit;
    ...
    if IsAbortProcess then exit;
    ...
    if IsAbortProcess then exit;
    ...
    // либо проверяем это условие в цикле
    while not IsAbortProcess do ...
  finally
    //здесь что-то делаем на прощание
  end;
end;

procedure TForm1.AbortThread(...);
begin
  MyThread.IsAbortProcess:= True;
end;
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993119
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

А чем Terminated вам не угодил? Почему его не проверять? Ведь еще меньше огорода городить.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993126
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-x
А чем Terminated вам не угодил? Почему его не проверять? Ведь еще меньше огорода городить.

Я на Лазаре кодю, там есть аналогичное
Код: pascal
1.
property Finished: Boolean read FFinished;


но оно ReadOnly, меняет значение посредством метода Terminate. Не помню уже, но мне этот способ не понравился.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993160
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

Дак в том-то и суть. Чтобы завершить трид, вызывай Terminate (этот метод только Terminated в true ставит). А в самом потоке смотри уже встроенный флаг Terminated. И лазарь здесь не при чем.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993163
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вообще не понимаю, ради чего оформлять нити в форму классов. Автор базового класса TThread сотворил огромную медвежью услугу новичкам.
Копируют на манер обезьян примеры из архангельских и фароновых, и всё. Сплошь и рядом "проблемы" - "поток завис", "прибить поток". Или обычный паттерн: "создать поток, запустить и ждать его завершения" - нафига?
Тот случай, когда инкапсуляция вредна.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993167
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ъъъъъ
Я вообще не понимаю, ради чего оформлять нити в форму классов. Автор базового класса TThread сотворил огромную медвежью услугу новичкам.
Копируют на манер обезьян примеры из архангельских и фароновых, и всё. Сплошь и рядом "проблемы" - "поток завис", "прибить поток". Или обычный паттерн: "создать поток, запустить и ждать его завершения" - нафига?
Тот случай, когда инкапсуляция вредна.


TThread очень удобный класс для простой работы с потоками
Но для того, чтобы его использовать, надо понимать, как работают потоки, да и вообще что это за зверь
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993171
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

TThread - квадратное колесо: для реализации самого мелкого функционала требуется прибегать к сабклассингу.

И - практически все новички используют его, не понимая, что делают, это грустная статистика.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993175
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
не понимая, что делают

Все остальное бла-бла ...
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993180
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-x
И лазарь здесь не при чем.

мне лень спорить. Я сделал свойство, которое можно менять напрямую без всяких прокладок-методов, объяснил - почему. А как там правильно по феншую, мне все равно. Извини :)
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993183
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Arefiev
ъъъъъ
не понимая, что делают

Все остальное бла-бла ...

Код: pascal
1.
A := B + C;


или
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
TAdd = class (T2Operate)
  protected
    function Execute(const Op1, Op2 : integer) : integer; override;

end;
...
implementation
function TAdd.Execute(const Op1, Op2 : integer) : integer;
begin
  result := Op1 + Op2;
end;
...
var
  fAddOp : TAdd;
begin
  fAddOp := TAdd.Create;
  try
    A := fAddOp(B, C);
...
  finally
    fAddOp.Free
  end
....


?
- только с наследниками TThread по понятным причинам еще и обращаться надо "с пониманием".
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993195
kapas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
st74TThread в Berlin 10.2
Будьте точными 10.2 не Berlin, а Tokio
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993205
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

Да есть такое - для новичков трид не просто дается. Некоторые, например, не понимая, как класс работает, изобретают колесо и внедряют свой механизм завершения трида.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993224
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-x
Некоторые, например, не понимая, как класс работает

а некоторые, компенсируя какие-то свои застарелые комплексы, начинают менторствовать на пустом месте и меряться пиписьками, привычно уводя тему в оффтоп.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993290
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас добавилась куча сахара типа анонимного треда с лямбдой в качестве параметра. ъ*5 должен быть доволен.
...
Рейтинг: 0 / 0
Ещё вопрос. TThread в Berlin 10.2
    #39993400
st74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ спасибо за правильный пинок в нужную сторону. как говорится слона то я и не приметил. просто для "помощника" написал код в качестве примера - думал сам все поймет..... в итоге свой собстенный склероз... добавился на ситуацию. хорошо обыгранную в фильме "Формула любви" когда карету чинить надо было.

- За сколько починишь?
- да за пол дня.
- А если за два?
- НУ если постаратся........
- А за неделю?
- НЕ ну барнин. тут помощники нужны. Сам не справлюсь......

склероз прошел. сейчас пишу менеджер потоков.

Но всем большое спасибо!!!!!!!!!!!
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ещё вопрос. TThread в Berlin 10.2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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