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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2019, 14:07   #1
noveek
Пользователь
 
Регистрация: 26.05.2015
Сообщений: 56
Вопрос Циклы for в thread

Скажите можно ли использовать дополнительно циклы for в многопоточных приложениях потому что я получаю зависание потоков через некоторое время (

структура кода

Код:
procedure th.Execute;
begin
while work do begin
  cs.Enter;

  cs.Leave;
if work then begin
Create
...
...
for i:= downto 1 do begin
//инициализирую весь текст
for j:=ishem.Count-1 downto 0 do 
//Ищу совпадения из списка в этом тексте и если нашёл сохраняю
if Pos('chtoto', gdeto.Text)>0 then begin
.Savetofile
end;
end;
freeandnil(1);
freeandnil(2);
freeandnil(3);
Synchronize(sync);
end;
end;
______________________
Форматируйте код и используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Вадим Мошев; 26.09.2019 в 14:11.
noveek вне форума Ответить с цитированием
Старый 26.09.2019, 14:18   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

если ishem, gdeto и прочее что-то типа объекта на форме, то проблемы могут быть из-за отсутствия синхронизации с vcl
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.09.2019, 14:27   #3
noveek
Пользователь
 
Регистрация: 26.05.2015
Сообщений: 56
По умолчанию

Ну я догадывался а как сделать то путёво ? Еслив отдельной процедуре то не вариант потому что нужный объект создаётся и уничтожается в потоке с которого я получаю текст в котором ищу

Последний раз редактировалось noveek; 26.09.2019 в 14:33.
noveek вне форума Ответить с цитированием
Старый 26.09.2019, 14:35   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не обращаться к ним из Execute
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.09.2019, 16:20   #5
noveek
Пользователь
 
Регистрация: 26.05.2015
Сообщений: 56
По умолчанию

Ты имеешь ввиду так ?

Код:
procedure th.Execute;
begin
...
Synchronize(fromfor)
end;
end;

procedure th.fromfor;
for i:= downto 1 do begin
//инициализирую весь текст
for j:=ishem.Count-1 downto 0 do 
//Ищу совпадения из списка в этом тексте и если нашёл сохраняю
if Pos('chtoto', gdeto.Text)>0 then begin
.Savetofile

Freeandnil(1)
Freeandnil(2)
Freeandnil(3)
Synchronize(sync);
end;
end;
noveek вне форума Ответить с цитированием
Старый 26.09.2019, 16:47   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Угу. Только если большинство действий будет выполняться в Synchronize зачем поток нужен?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.09.2019, 16:59   #7
noveek
Пользователь
 
Регистрация: 26.05.2015
Сообщений: 56
По умолчанию

К сожалению не помогло даже хуже стало ещё и форма стала подвисать (
noveek вне форума Ответить с цитированием
Старый 26.09.2019, 17:02   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну так, естественно, то форму переодически дергали, то теперь вы фризите на весь цикл.
p51x вне форума Ответить с цитированием
Старый 26.09.2019, 17:28   #9
noveek
Пользователь
 
Регистрация: 26.05.2015
Сообщений: 56
По умолчанию

Как сделать то помогите пжл
noveek вне форума Ответить с цитированием
Старый 26.09.2019, 17:34   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Меняйте логику потока. Передавайте ему строки где и что искать. Запись в файл может быть длительной операцией, тем более в цикле - делайте асинхронно или в нвом потоке, или потом.
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
boost::thread std::thread lallollulz Общие вопросы C/C++ 2 11.09.2019 00:48
Итерационные циклы, циклы с фактериалами, вообще не могу догнать( помогите плиз! Svetlana_ Помощь студентам 2 01.11.2015 18:58
C++ Thread и WIN API Pir C++ Builder 2 13.01.2014 12:12
thread slipp Win Api 2 24.11.2013 03:11
Thread и MVC OnlyFart ASP.NET 0 06.05.2011 11:12