Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.004 c
15-1297676970
***
2011-02-14 12:49
2011.06.05
Россия занимает 3-е место в мире по количеству выпускаемых книг


6-1237972450
антон1243232
2009-03-25 12:14
2011.06.05
Проблема со склейкой пакетов


15-1297690649
Gu
2011-02-14 16:37
2011.06.05
Как получить индекс производительности windows


15-1297866402
bss
2011-02-16 17:26
2011.06.05
Word.Application - загрузка из потока


2-1298584745
Артём
2011-02-25 00:59
2011.06.05
Деление строки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский