Вниз
Скачать: 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.961 c
2-1135759223
Max Zyuzin
2005-12-28 11:40
2006.01.22
Составляю SQL запросик


14-1135586366
vecna
2005-12-26 11:39
2006.01.22
долгорукий - дед мороз!


14-1135888048
Andy BitOff
2005-12-29 23:27
2006.01.22
Да-а-а. Нельзя объять необъятное :( А жаль.


1-1134663265
_white_
2005-12-15 19:14
2006.01.22
Как реализовать связи как в ERWin


2-1136193427
Grigirian
2006-01-02 12:17
2006.01.22
Как узнать папку в которой находится ехе файл мое программы




   Наверх