Форум: "Потрепаться";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
ВнизПотоки Найти похожие ветки
← →
Igor_thief (2002-07-17 13:21) [0]Как остановить все потоки созданные для одной переменной типа TThread?
← →
Alx2 (2002-07-17 13:30) [1]???
Подробнее можно? Что значит "поток созданный для переменной"?
← →
Igor_thief (2002-07-17 13:42) [2]Воообщем так. Есть переменная типа TThread. Ести список с n елементами и для каждого елемента при нажатии но кнопочку в цыкле создается поток. Но при вызове Terminate закрывается только один поток. Как закрыть все петоки для данной переменной? Просто не хочется для отдельного потока описывать отделную переменную.
← →
Виктор Щербаков (2002-07-17 13:45) [3]Переменная типа TThread - это указатель на один экземпляр класса TThread.
Так что если ты пишешь
MyThread := TMyThread.Ceate(false)
а потом сразу
MyThread := TMyThread.Ceate(false),
то ссылку на первый созданный экземпляр ты потерял безвозвратно, и остановить его не сможешь.
← →
Виктор Щербаков (2002-07-17 13:46) [4]
> Просто не хочется для отдельного потока описывать отделную
> переменную.
Опиши массив:
var Threads: array of TMyThread;
← →
Igor_thief (2002-07-17 13:56) [5]Была идея насчет масива, но я пока решил проверить другой вариант.
constructor TMThread.Create(aPath: String);
begin
inherited Create(True);
FreeOnTerminate := True;
FPath := aPath;
Self.Priority := tpHighest;
Resume;
end;
А в цыкле пишу MyVar.Create(list[i])
← →
ФФФ (2002-07-17 14:18) [6]Тебе же говорят, что теряешь ссылку. Чтобы не терять надо уничтожить поток, а потом создавать снова для этой переменной.
Альтернатива массиву - список TList, куда заносишь ссылки на потоки. По мере надобности можно уничтожать потоки и добавлять новые пользуясь 1 переменной MyVar, которой присваиваешь нужную ссылку из TList.
← →
Проктолог (2002-07-17 14:20) [7]я не понял, о каких потоках идет речь?
← →
Виктор Щербаков (2002-07-17 14:25) [8]Проктолог (17.07.02 14:20)
Думаешь по твоей специальности? :)
← →
Проктолог (2002-07-17 14:36) [9]да вот чего-то никак не уразумею
← →
NailS (2002-07-17 20:50) [10]
ThreadList : TThreadList;
constructor TMThread.Create(aThreadList: TThreadList);
begin
inherited Create(True);
FreeOnTerminate := True;
aThreadList.Add(Self);
Self.Priority := tpHighest;
Resume;
end;
procedure ShutDownAll;
begin
with ThreadList.LockList do
try
while Count > 0 do
try
try
TMThread(Items[0]).Terminate;
finally
Delete(0);
end;
except
On E : Exception do ;
end;
finally
ThreadList.UnLockList;
end;
end;
Код не проверял, но идея я думаю понятна.
← →
Igor_thief (2002-07-19 12:32) [11]>NailS © (17.07.02 20:50)
Спасибочи, но я уже разобрался.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c