Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Beetlejuice541
1 / 1 / 0
Регистрация: 21.01.2015
Сообщений: 235
1

Работа со stringlist в потоке

19.06.2015, 09:39. Просмотров 652. Ответов 9
Метки нет (Все метки)

Есть stringlist(глобальный) в него загружается текст из txt.Как ПРАВИЛЬНО передать stringlist в поток?Чтобы потом можно было брать отдельные строки и работать с ними?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2015, 09:39
Ответы с готовыми решениями:

Неправильная работа разделителя в StringList
Нужно разбить строку с разделителем в виде точки с запятой (; ) на список строк...

Работа с несколькими строками в StringList'e
procedure Thread.Execute; var I: Integer; begin while True do begin...

Работа с StringList: Сделать сортировку строк
Здравствуйте уважаемые программисты! В StringList загружен к примеру...

Работа в потоке
Компонент WebBrowser проста закинут на форму. И поэтому описан в type TForm2...

В потоке работа с HTTP
procedure TNewThread.Execute; begin cs.Enter; while stop do Всякие...

9
Immo
186 / 185 / 92
Регистрация: 02.10.2012
Сообщений: 826
19.06.2015, 11:02 2
а зачем это надо?как оригинал задания звучит
0
Beetlejuice541
1 / 1 / 0
Регистрация: 21.01.2015
Сообщений: 235
19.06.2015, 12:43  [ТС] 3
ну вот так
есть txt файл в нем строки
нужно при помощи потоков проверить каждую строчку и выполнить с ней операции (pos,copy...) ну и дальше...
0
Immo
186 / 185 / 92
Регистрация: 02.10.2012
Сообщений: 826
19.06.2015, 12:59 4
надо синхронизировать поток с формой
написать в потоке процедурку для этого - procedure SyncForm;
в эксекюте Synchronize(SyncForm);
и уже в той процедуре работаешь со списком
0
Beetlejuice541
1 / 1 / 0
Регистрация: 21.01.2015
Сообщений: 235
19.06.2015, 13:18  [ТС] 5
можно чуть чуть подробнее? ну или хотябы ссылочку где почитать?
А то мало понял(
0
Immo
186 / 185 / 92
Регистрация: 02.10.2012
Сообщений: 826
19.06.2015, 13:31 6
Лучший ответ Сообщение было отмечено Beetlejuice541 как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 TUrThread=class(TThread)
  private
  protected
    procedure Execute;  override;
  public
    procedure SyncForm;
    constructor Create();
    destructor Destroy; override;
  end;  
...
procedure TUrThread.Execute;
begin
Synchronize(SyncForm); 
end;
...
procedure TUrThread.SyncForm;
var
TempSL:TstringList;
begin
TempSL:=TstringList.create;
//вся работа с листом
...
твойглобальныйлист:=TempSL;
FreeAndNil(TempSL);
end;
...
end;
1
Beetlejuice541
1 / 1 / 0
Регистрация: 21.01.2015
Сообщений: 235
19.06.2015, 13:33  [ТС] 7
вот так бы все делали,спасибо большое!
0
krapotkin
3414 / 3021 / 1047
Регистрация: 14.04.2014
Сообщений: 14,656
Записей в блоге: 15
19.06.2015, 19:08 8
Цитата Сообщение от Immo Посмотреть сообщение
procedure TUrThread.SyncForm;
var
TempSL:TstringList;
begin
TempSL:=TstringList.create;
//вся работа с листом
...
твойглобальныйлист:=TempSL;
FreeAndNil(TempSL);
end;
ошибка тут


если поток один, то отдать ему стринглист насовсем и пусть играется сколько хочет
нельзя использовать его когда один поток читает, другой пишет...

Добавлено через 7 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TUrThread=class(TThread)
  private
  protected
    procedure Execute;  override;
  public
    FList:TStringList;
    constructor Create(AList:TStringList);
end;
 
 
constructor  TUrThread.Create(AList:TStringList);
begin
  inherited Create(True);
  FList:=AList;
  FreeOnTerminate:=True;
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
TForm1=Class(TForm)
...
procedure ThreadTerminated(Sender:TObject); 
... 
end;
 
procedure TForm1.ThreadTerminated(Sender:TObject);
begin
  ShowMessage('Мама, я покакал!');
  (Sender as TUrThread).FList.free;
end;
 
procedure TForm1.ButtonClick(Sender:TObject);
var T:TUrThread;
  L:TStringList;
begin
  L:=TStringList.Create;
  L.LoadFromFile(Filename);  
  
  T:=TUrThread.Create(L);
  T.OnTerminate:=ThreadTerminated;  
  T.Resume;
end;
0
Beetlejuice541
1 / 1 / 0
Регистрация: 21.01.2015
Сообщений: 235
19.06.2015, 19:13  [ТС] 9
Стоп,это будет работать если потоков много?
0
krapotkin
3414 / 3021 / 1047
Регистрация: 14.04.2014
Сообщений: 14,656
Записей в блоге: 15
21.06.2015, 22:58 10
Цитата Сообщение от Beetlejuice541 Посмотреть сообщение
есть txt файл в нем строки
нужно при помощи потоков проверить каждую строчку и выполнить с ней операции (pos,copy...) ну и дальше...
что значит при помощи потоков проверить строчки???
если файл размером 100-500 кб там не нужно никаких "вторых" потоков
поток тут вводится чтобы не "зависал" интерфейс программы
но время работы с таким файлом таково,что это зависание никто и не заметит

все вопросы сводятся к вопросу "для чего"...
0
21.06.2015, 22:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2015, 22:58

Работа с DBXJSON в потоке
Есть вот такой вот код procedure JAjax; var ajax:TStringList; JsonArray:...

Работа с формой из модуля в потоке
Как сделать изменение текста label из модуля в потоке?

Работа в потоке. Одновременно несколько количество
Начал делать все через поток, но не могу как сделать, так что бы в потоке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru