Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поле terminate вне поточного класса. / 9 сообщений из 9, страница 1 из 1
19.08.2019, 20:17
    #39851328
Basketbol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле terminate вне поточного класса.
Знаю, тема звучит ужасно)
У меня есть процедура "Пауза"

Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TFmMain.Pause(pause: Integer);
var
  i : integer;
begin
  for i := 1 to round(pause * 10) do
    sleep(100);
end;



Иногда мне нужно выполнять её в основном потоке, а иногда - из дочернего.
Если выполняется из дочернего - я бы хотел анализировать поле Terminated:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TMyThread.Pause(pause: Integer);
var
  i : integer;
begin
  for i := 1 to round(pause * 10) do
  begin
    if terminated then break;
    sleep(100);
  end;
end;



Соответственно, мы имеем примерно два одинаковых описания примерно одной и той же процедуры.
У меня таких процедур и функций много (тех, которые нужно выполнять и в основном потоке и в дочернем).
И все они отличаются только наличием/отсутствием анализа поля terminated.
Может быть есть какой нибудь хитрый трюк ООП, который бы позволил определять контекст выполнения и не описывать все по 2 раза?
...
Рейтинг: 0 / 0
19.08.2019, 20:20
    #39851330
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле terminate вне поточного класса.
Basketbol,

Код: pascal
1.
TThread.Current
...
Рейтинг: 0 / 0
19.08.2019, 20:27
    #39851335
Basketbol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле terminate вне поточного класса.
kealon(Ruslan),
но я не смогу написать
Код: pascal
1.
2.
if TThread.Current.terminated then
 ...



т.к. поле terminated - это protected поле TThread
...
Рейтинг: 0 / 0
19.08.2019, 20:27
    #39851336
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле terminate вне поточного класса.
Basketbol,

потоки-шмотоки.

А зачем ты round() используешь?
:)
...
Рейтинг: 0 / 0
19.08.2019, 20:33
    #39851340
Basketbol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле terminate вне поточного класса.
ёёёёёА зачем ты round() используешь?
:)
Это оффтоп)
...
Рейтинг: 0 / 0
19.08.2019, 20:40
    #39851345
Basketbol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле terminate вне поточного класса.
Наверное вот так можно написать:
Код: pascal
1.
2.
if TThread.Current.CheckTerminated then
  ...



Спасибо ealon(Ruslan) , натолкнул на нужные мысли.
...
Рейтинг: 0 / 0
20.08.2019, 07:45
    #39851407
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле terminate вне поточного класса.
BasketbolУ меня таких процедур и функций много (тех, которые нужно выполнять и в основном потоке и в дочернем).
"Контекст" это обычно Sender: TObject , а зная его класс is можно по разному с ним работать as .
...
Рейтинг: 0 / 0
20.08.2019, 17:31
    #39851785
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле terminate вне поточного класса.
Basketbol
Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TFmMain.Pause(pause: Integer);
var
  i : integer;
begin
  for i := 1 to round(pause * 10) do
    sleep(100);
end;


Иногда мне нужно выполнять её в основном потоке
Мне почему-то иногда хочется убивать людей... даже не знаю откуда это во мне :(
...
Рейтинг: 0 / 0
20.08.2019, 20:38
    #39851838
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поле terminate вне поточного класса.
для начала стоит хоть мало-мальски обосновать такое дикое желание
потому что помогать делать то, что делать не нужно, это даже хуже, чем делать это самому...
про XYZ все помнят тут

что изначально нужно-то было?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поле terminate вне поточного класса. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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