Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2017, 11:28   #1
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию Поток + Readln

Подскажите, пытаюсь добавить в мемо в потоке содержимое текстового файла. В итоге получается какая то ерунда, даже если использовать критические секции, либо становиться одно поточным, и отрабатывает нормально, либо много поточным и получается ерунда.. ЗЫ к примеру если синхронизирую переменную ACC все хорошо(в мемо добавляется 10 строчек как нужно).. Как добавить 10 строк без повторений, в многопоточном режиме, спасибо за помощь
Код:
procedure TNewThread.Execute;
var
Acc:integer;
cur:integer;
tx:textfile;
sf:string;
begin
               AssignFile(tx,'1.txt');
              Reset(tx);

     while work  do
          begin
            Inc(Acc); //Acc - глобальная равна 0 при запуске цикла.
	    cur:=Acc;	
            if cur=10 then  Work:=False;
            Readln(tx, sf);
            Synchronize(sync);
			
						
procedure TNewThread.Sync;
begin
   Form1.mmo1.Lines.Add(sf)
end;
Разобрался Всем спасибо) Можно закрывать тему !

Последний раз редактировалось niva622; 09.02.2017 в 12:11.
niva622 вне форума Ответить с цитированием
Старый 09.02.2017, 12:18   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Как добавить 10 строк без повторений, в многопоточном режиме
эти десять строк находятся в файле?
да.
т.е. несколько (ДВА и более) потоков должны читать ОДИН файл и передавать РАЗНЫЕ строки в один мемо.
Вам не кажется это желанием странного?
P.S. я не говорю что этого невозможно добиться, но выглядит немного странновато.

чтобы не было дублей потоки должны указывать какую строку(номер строки) они добавляют, и иметь проверку на УЖЕ наличие такой строки(с таким номером).
и половину времени каждый поток потратит на попытки повторного и потому неуспешного ввода.

чтобы уменьшить "бесполезную" работу потоков надо как-то РАЗДЕЛИТЬ работу потоков.
к примеру указать что один поток вводит четные(по номеру) строки файла
а другой стало быть НЕчетные строки.
больше потоков, больше шаг по строкам.

НО повторюсь, наличие одного единственного источника данных(файла) и такого же единственного приемника (мемо) только ЗАМЕДЛИТ обработку.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 09.02.2017, 12:36   #3
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Вам не кажется это желанием странного?
в данном примере действительно 10 строк, но в моей программе размер фала может составлять более 100 мб.. Сейчас программа грузит все эти 100 мб в StringList.. в следствии забирает много ресурсов оперативной памяти..

Последний раз редактировалось niva622; 09.02.2017 в 13:11.
niva622 вне форума Ответить с цитированием
Старый 09.02.2017, 13:31   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Сейчас программа грузит все эти 100 мб в StringList.
а потом переносит в Мемо.
Грузи "сразу" в Мемо. ресурсов будет меньше.
Код:
Memo.Lines.LoadFromFile(...);
НО ...
А зачем они в визуале?
кто-то будет читать эту "войну и мир"? (1-й том данного произведения занимает если не изменяет память 913 Кб в формате txt).
http://www.programmersforum.ru/showp...5&postcount=52
т.е. ваш файл это свыше 100 томов этого не очень маленького произведения.

Цитата:
в следствии забирает много ресурсов
а потоки это как ни странно тоже ресурсы.
И для их работы(потоков) причем БЕЗ учета ресурсов потребных для обработки НЕСКОЛЬКИХ копий файла будет немало.
Где выгода?
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 09.02.2017 в 13:39.
evg_m на форуме Ответить с цитированием
Старый 09.02.2017, 13:36   #5
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
а потом переносит в Мемо.
Грузи "сразу" в Мемо. ресурсов будет меньше.
Код:
Memo.Lines.LoadFromFile(...);
а потоки это как ни странно тоже ресурсы.
И для их работы(потоков) причем БЕЗ учета ресурсов потребных для обработки НЕСКОЛЬКИХ копий файла будет немало.
Вот об этом я не знал, но теперь понял что вы имели ввиду, действительно с каждой строчкой текста программе становится тяжелее и тяжелее считывать следующую строку из файла, в итоге 200 потоков превратились в 3-5 максимум)) Спасибо Вам за советы
niva622 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Readln timeout NEoMASTERR Общие вопросы Delphi 11 29.10.2015 10:09
Readln и задержка Freezy Паскаль, Turbo Pascal, PascalABC.NET 0 17.04.2011 15:26
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40
Readln BaJIuK Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 25.06.2010 04:21