Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.15;
Скачать: CL | DM;

Вниз

Потоки   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
3-47984
Roma111
2002-07-26 15:56
2002.08.15
XP в IB6


3-47997
Alfred
2002-07-27 17:19
2002.08.15
Ошибка


1-48176
galik
2002-08-02 15:35
2002.08.15
Express QuantumGrid?


14-48261
roadrunner
2002-07-19 11:18
2002.08.15
Помогите советом. Печать графических файлов


6-48242
Ampersand
2002-05-31 07:42
2002.08.15
Запретить работу по TCP/IP