Главная страница
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.012 c
14-48314
Kombat
2002-07-22 22:45
2002.08.15
Как передать проект заказчику с частичным кодом?


1-48056
pentium
2002-08-03 09:46
2002.08.15
Мочилка троянцев, вирусов, и.т.п


1-48083
Dinara
2002-07-31 23:29
2002.08.15
Как из второго экземпляра программы послать первому сообщение?...


1-48148
Poirot
2002-08-01 15:40
2002.08.15
Редактор подобный TBrush.Style, TColor


1-48041
Are you want a tea?
2002-08-03 20:23
2002.08.15
TStrings и ему подобные