Форум: "Начинающим";
Текущий архив: 2011.06.05;
Скачать: [xml.tar.bz2];
ВнизПроблема с потоками Найти похожие ветки
← →
grigor (2011-02-25 17:36) [0]Создаю поток:
FindProcessThread := TFindProcessThread.Create;
Останавливаю поток:FindProcessThread.Terminate;
Заново создаю, выполняется конструктор:constructor TFindProcessThread.Create(URLList:TListView; ProxyList:TListView;
MaxThreads:Integer);
begin
self.FreeOnTerminate := True;
inherited Create(false);
end;
И дальше ничего не происходит, главный цикл Execute не работает. Помогите, с потоками первый день работаю.
Деструктор:
constructor Create;
destructor Destroy; override;
procedure Execute; override;
//..
destructor TFindProcessThread.Destroy;
var
i: Integer;
begin
//...
inherited Destroy;
end;
← →
RWolf © (2011-02-25 17:43) [1]в каталоге Demos\Threads есть пример.
← →
Amoeba_ (2011-02-25 20:35) [2]
> Помогите, с потоками первый день работаю.
Пожалуйста!
Читать до полного просветления:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1370
← →
grigor (2011-02-25 20:38) [3]Нашел такую вещь: после этого кода при повторном обращении к ThreadList.LockList.Count вылетает без каких либо предупреждений.
Добавление в/удаление из ThreadList производится в деструкторе и конструкторе потоков.var
i: Integer;
begin
for i := 0 to ThreadList.LockList.Count - 1 do
TParserThread(ThreadList.LockList.Items[i]).Terminate;
ThreadList.UnlockList;
inherited Destroy;
end;
← →
grigor (2011-02-25 20:52) [4]Всмысле вылетает не из программы, а из функции - т.е. при следующей проверке кол-ва записей дальше код в потоке не идет.
← →
Palladin © (2011-02-25 22:01) [5]как бы ты перевел LockList ?
← →
grigor (2011-02-25 22:11) [6]2Palladin
???
Кажется я понял намек, теперь работает, но всеравно не понимаю почему так.for i := 0 to getThreadCount - 1 do
begin
TParserThread(ThreadList.LockList.Items[i]).Terminate;
ThreadList.UnlockList;
end;
← →
Palladin © (2011-02-25 22:12) [7]да потому что ты хреново намек понял, а справку вообще не читал
← →
Palladin © (2011-02-25 22:14) [8]а класс TThreadList вообще не предназначен для хранения объектов потоков
← →
RWolf © (2011-02-26 01:00) [9]
> теперь работает, но всеравно не понимаю почему так.
чего ж непонятного — сколько раз в [3] вызывается LockList?
правильно, один раз при взятии значения Count, и ещё Count раз в цикле.
а UnlockList — всего единожды.
дальше второго подряд вызова LockList управление не пройдёт.
← →
Slym © (2011-02-26 11:25) [10]лишнюю переменную зажали?
list:=ThreadList.LockList;
try
for i:= 0 to list.Count - 1 do
TParserThread(list.Items[i]).Terminate;
finally
ThreadList.UnlockList;
end;
или без явной переменнойwith ThreadList.LockList do;
try
for i:= 0 to Count - 1 do
TParserThread(Items[i]).Terminate;
finally
ThreadList.UnlockList;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.06.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c