Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-48167
Дельфятник
2002-08-02 11:31
2002.08.15
Освобождение памяти из-под объектов.


7-48330
esprit_bel
2002-06-01 10:12
2002.08.15
раскладка


1-48055
anod
2002-08-02 22:28
2002.08.15
Иконка в трее :)


3-47918
Sapersky_
2002-07-22 04:57
2002.08.15
Хранение файлов


1-48153
lpp
2002-07-31 11:43
2002.08.15
Как сделать форму для ввода пароля?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский