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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.02.2016, 14:57   #1
grh
Пользователь
 
Регистрация: 24.09.2010
Сообщений: 35
По умолчанию Delphi 2010: Регулярное обновление строки состояния

Всем привет. Иногда при выполнении долговременных процедур Delphi-приложение "подвисает", и в том числе "подвисает" строка состояния. Что нужно сделать для того, чтобы строка состояния регулярно обновлялась?
grh вне форума Ответить с цитированием
Старый 29.02.2016, 14:59   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не выполнять долговременные процедуры в UI потоке.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.02.2016, 15:01   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

варианты:
- не писать "долговременных процедур"
- внутри "долговременных процедур" вызвать Application.ProcessMessages
- выполнять "долговременные процедуры" в отдельном (отдельных) нитях (выч.потоках)

и многое, многое другое...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.02.2016, 15:22   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Надо запостить во все интернеты!

284971.jpg
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.03.2016, 11:09   #5
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от grh Посмотреть сообщение
Всем привет. Иногда при выполнении долговременных процедур Delphi-приложение "подвисает", и в том числе "подвисает" строка состояния. Что нужно сделать для того, чтобы строка состояния регулярно обновлялась?
Прописать выполнение процедуры в таймере. Компонент TTimer.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 01.03.2016, 11:11   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И чем это поможет? Таймер в том же UI потоке выполняет код.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.03.2016, 11:21   #7
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
И чем это поможет? Таймер в том же UI потоке выполняет код.
Сколько себя помню некогда не "подвисало", даже при длинных процедурах. Может это особенность школы нового программирования? И кстати выполняет он это в отдельном потоке.
А если проблема не слишком решается, то один ответ: Используем локальные переменные, константы, массивы и меньше обращаемся к компонентам. Иногда и такая оптимизация кода очень сильно помогает.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 01.03.2016, 11:30   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А может таки сделать хорошо, без костылей?
Примеров многопоточных приложений в интернетах - 47 вагонов.
Даже я тут сколько штук выкладывал.
Да и в любой книжке по delphi всё это есть.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.03.2016, 11:30   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
И кстати выполняет он это в отдельном потоке.
Хватит бред писать во всех своих сообщениях.
Создай таймер и запусти в нем бесконечный цикл.

Код:
procedure TForm1.tmr1Timer(Sender: TObject);
begin
  while True do
  begin
    Sleep(500);
    Beep;
  end;
end;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.03.2016, 11:31   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сколько себя помню некогда не "подвисало", даже при длинных процедурах
угу.
кинь на форму Edit1, TTimer

и напиши на код таймера, например, так
Код:
var i : integer;
  s: string;
begin
  s := '';
  for i:=1 to 100000 do s:=s+IntToStr(i);
  edit1.Text := s
end;
а потом расскажешь, что получилось, хорошо?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярное выражение. Элементы строки в массив. Stilet JavaScript, Ajax 7 04.11.2015 09:47
Обновление dataSet VS 2010 C# keef Помощь студентам 0 23.05.2013 00:00
строка состояния в visual 2010 dimon131 Помощь студентам 0 19.04.2012 20:46
Ошибка вызова строки состояния окна voyager2011 Visual C++ 2 31.10.2011 23:37
Обновление первоначального состояния формы street-walker Общие вопросы Delphi 2 13.05.2009 00:07