Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Потоки и работа с TstringList


Автор: mimo 19.5.2011, 22:15
Здравствуйте, есть чекбокс
Код

procedure TForm1.chk1Click(Sender: TObject);
var
temp: Tstringlist;
begin
temp: TstringList.create;
temp.loadfromfile('test.txt');
end;


есть потоки
   With TClientThread.Create(true) do
    begin
     CheckProperty1 := chk1.Checked;
    Resume;
   end;
и мне необходимо, чтобы  в процедуре .Execute каждый поток работал с текстовым файлом, загруженным в temp. Как осуществить такую работу правильно? потокобезопасно? Можно ли сделать такое в самом .Execute ,т.е. каждый поток создавал и загружал в temp один и тот же текстовый файл? или как перенести этот temp в .Execute?

Автор: Snowy 20.5.2011, 00:26
Проще всего по реализации - в каждом потоке создать свой temp и грузить в него файл. Конфликтов не будет.
Если делать через единый temp, то потоки будут мешать друг другу.
Монопольный захват может свести на нет сам смысл использования тредов.
Непосредственная реализация зависит от того, насколько большой файл.

Автор: bems 20.5.2011, 05:15
Цитата(Snowy @  20.5.2011,  00:26 Найти цитируемый пост)
Если делать через единый temp, то потоки будут мешать друг другу.
Но если каждый тред только читает temp, а результаты туда не пишет, то должно быть ок

Автор: mimo 20.5.2011, 16:44
файл не большой, около метра.
т.е. если записать
Код

procedure TForm1.Execute;
var
  temp: Tstringlist;
begin
...
 temp: TstringList.create;
 temp.loadfromfile('test.txt');
...

то работать будет нормально?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)