Вниз
Скачать: CL | DM;

Завершение потока TTread;   Найти похожие ветки 

← →
OlegNik   (2005-12-16 15:06) [0]

Предистория:
Есть поток : TTread_1
задача которого состоит в том, что он должен расчитывать и  отображать характеристики объекта во времени.
Есть начало и конец работы TTread_1
a : TTread_1;                      // объявил
a := TTread_1.Create(False); // запустил
впроцессе работы получаю и любуюсь результатами работы потока
по истечению времени работы
поток сам себя убивает TerminateThread(a.Handle,0);
Внимание вопрос и мои проблемы ?.
Пришлось отслеживать работу нескольких объектов, то есть
несколько раз  запустить TTread_1
Как обратится теперь к нужному ОПРЕДЕЛЕННОМУ объекту TTread_1 и получить его характеристики (его переменные)?
Как по истечению работы остановить или закончить работу ОПРЕДЕЛЕННОГО потока TTread_1?
Примечание: мне не известно сколько раз запустит TTread_1
пользователь, то есть не известно количество объектов.


← →
Digitman ©   (2005-12-16 15:09) [1]


> поток сам себя убивает TerminateThread(a.Handle,0);


что за суицид ?!
нормальное завершение поточной ф-ции уже не модно ?
харакири обязательно ?


← →
clickmaker ©   (2005-12-16 15:10) [2]

TThreadList
либо просто TList с TThread


← →
Digitman ©   (2005-12-16 15:11) [3]


> Как обратится теперь к нужному ОПРЕДЕЛЕННОМУ объекту TTread_1


заведи массив и складывай в его элементы ссылки на созданные тобой thread-объекты


← →
OlegNik   (2005-12-16 15:15) [4]

Digitman. Подробнее на счет суицида и вариант(ы) альтернативного решения
TerminateThread(a.Handle,0);
Кроме того, если Вы заметили есть второй вопрос вернее первый:
Как обратится теперь к нужному ОПРЕДЕЛЕННОМУ объекту (TTread_1) и получить его характеристики (его переменные)?


← →
clickmaker ©   (2005-12-16 15:44) [5]


> Как обратится теперь к нужному ОПРЕДЕЛЕННОМУ объекту (TTread_1)

TThread(List.Items[i]).ThreadProperty если TList
aThreads[i].ThreadProperty если array of TThread


← →
Digitman ©   (2005-12-16 15:46) [6]


> Подробнее на счет суицида и вариант(ы) альтернативного решения


нет никаких хитрозадых "альтернативных" решений : как только метод Execute() завершает свое выполнение (штатно, т.е. без необработанных потенциальных исключений в его теле), в первом приближении можешь считать, что поток завершился

procedure TMyThread.Execute;
begin
 try
   .. что угодно ..
   Exit; //штатное завершение "поточной функции"
   ..
 except
  .. здесь можно вести протоколирование не ожидаемых исключений, НИ В КОЕМ случае не вызывая при этом raise;
 end;
end; //штатное завершение "поточной функции"


> Кроме того, если Вы заметили есть второй вопрос вернее первый


ты не расставил приоритеты в своих вопросах, так "чего ж тебе надобно, старче ?" (С)


> Как обратится


на него я ответил в [3]

а в [2] - альтернативное решение, зачастую гораздо лучшее. нежели решение с массивами


← →
OlegNik   (2005-12-16 16:06) [7]

Благодарю за решение проблем : clickmaker, Digitman (в алфавитном порядке).
Вопрос считаю утратившим силу. Спасибо.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.023 c
2-1136440033
ezorcist
2006-01-05 08:47
2006.01.22
Изменить палитру на Image


2-1136469766
ArtemESC
2006-01-05 17:02
2006.01.22
Оттенки цветов...


11-1117925548
rofl
2005-06-05 02:52
2006.01.22
Kol Memo (Editbox) limited to 30000 bytes of text


1-1134713613
Дмитрий_177
2005-12-16 09:13
2006.01.22
Проблема с созданием елементов в Notebook


14-1135929811
Piter
2005-12-30 11:03
2006.01.22
Справка о болезни




   Наверх