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

Вниз

Проблема с потоками   Найти похожие ветки 

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

Наверх




Память: 0.46 MB
Время: 0.002 c
2-1298780760
filimonic
2011-02-27 07:26
2011.06.05
Как заблокировать кнопку Пуск в Windows 7


1-1256216742
GreyWolf
2009-10-22 17:05
2011.06.05
ListView неправильно позицинирует первую строку


3-1260280989
noob_one
2009-12-08 17:03
2011.06.05
Где хранятся домены в Interbase 7.5 ?


1-1256587984
fuzzy
2009-10-26 23:13
2011.06.05
Не срабатывают breakpoints при отладке ActiveXForm


1-1255806622
minomorf
2009-10-17 23:10
2011.06.05
Как в TSynEdit сделать подсветку строки (как при ошибке)





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