Главная страница
    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.47 MB
Время: 0.003 c
10-1175455973
nali
2007-04-01 23:32
2011.06.05
Удаляются закладки после замены текста


2-1298365017
oleg_teacher
2011-02-22 11:56
2011.06.05
Таблицы, word, delphi


3-1260262902
mz
2009-12-08 12:01
2011.06.05
sql-запрос


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


15-1298011878
Virgo_Style
2011-02-18 09:51
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский