![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Завершение потока TTread; [D5, D6, D7]
OlegNik © (2005-12-16 15:06:00)Предистория:
Есть поток : TTread_1
задача которого состоит в том, что он должен расчитывать и отображать характеристики объекта во времени.
Есть начало и конец работы TTread_1
a : TTread_1; // объявил
a := TTread_1.Create(False); // запустил
впроцессе работы получаю и любуюсь результатами работы потока
по истечению времени работы
поток сам себя убивает TerminateThread(a.Handle,0);
Внимание вопрос и мои проблемы ?.
Пришлось отслеживать работу нескольких объектов, то есть
несколько раз запустить TTread_1
Как обратится теперь к нужному ОПРЕДЕЛЕННОМУ объекту TTread_1 и получить его характеристики (его переменные)?
Как по истечению работы остановить или закончить работу ОПРЕДЕЛЕННОГО потока TTread_1?
Примечание: мне не известно сколько раз запустит TTread_1
пользователь, то есть не известно количество объектов.
OlegNik (2005-12-16 16:06:00) [1]Благодарю за решение проблем : clickmaker, Digitman (в алфавитном порядке).
Вопрос считаю утратившим силу. Спасибо.
Digitman (2005-12-16 15:46:00) [2]
> Подробнее на счет суицида и вариант(ы) альтернативного решения
нет никаких хитрозадых "альтернативных" решений : как только метод Execute() завершает свое выполнение (штатно, т.е. без необработанных потенциальных исключений в его теле), в первом приближении можешь считать, что поток завершился
procedure TMyThread.Execute;
begin
try
.. что угодно ..
Exit; //штатное завершение "поточной функции"
..
except
.. здесь можно вести протоколирование не ожидаемых исключений, НИ В КОЕМ случае не вызывая при этом raise;
end;
end; //штатное завершение "поточной функции"
> Кроме того, если Вы заметили есть второй вопрос вернее первый
ты не расставил приоритеты в своих вопросах, так "чего ж тебе надобно, старче ?" (С)
> Как обратится
на него я ответил в [3]
а в [2] - альтернативное решение, зачастую гораздо лучшее. нежели решение с массивами
clickmaker (2005-12-16 15:44:00) [3]
> Как обратится теперь к нужному ОПРЕДЕЛЕННОМУ объекту (TTread_1)
TThread(List.Items[i]).ThreadProperty если TList
aThreads[i].ThreadProperty если array of TThread
OlegNik (2005-12-16 15:15:00) [4]Digitman. Подробнее на счет суицида и вариант(ы) альтернативного решения
TerminateThread(a.Handle,0);
Кроме того, если Вы заметили есть второй вопрос вернее первый:
Как обратится теперь к нужному ОПРЕДЕЛЕННОМУ объекту (TTread_1) и получить его характеристики (его переменные)?
Digitman (2005-12-16 15:11:00) [5]
> Как обратится теперь к нужному ОПРЕДЕЛЕННОМУ объекту TTread_1
заведи массив и складывай в его элементы ссылки на созданные тобой thread-объекты
clickmaker (2005-12-16 15:10:00) [6]TThreadList
либо просто TList с TThread
Digitman (2005-12-16 15:09:00) [7]
> поток сам себя убивает TerminateThread(a.Handle,0);
что за суицид ?!
нормальное завершение поточной ф-ции уже не модно ?
харакири обязательно ?