telepath |
Отправлено: 08.06.2004, 10:30 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Если на форме лежит токо ProgressBar и пара лейблов, при громоздких вычислениях (ProgressBar должен показывать их прогресс) — лэйблов вообще не видно, а форма до конца не прорисовывается. Это можно как-то решить?
Заранее благодарен |
|
AVC |
Отправлено: 08.06.2004, 10:40 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
А Application->ProcessMessages() делаетcя?
А метод Update() не забыт? |
|
Gedeon |
Отправлено: 08.06.2004, 10:44 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (AVC @ 08/06/2004, 11:42) | А Application->ProcessMessages(); |
Я думаю этого достаточно будет.
2telepath поставте это в тело вашего цикла, где проходят вычисления.
|
|
telepath |
Отправлено: 08.06.2004, 10:53 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Большое спасибо, помогло |
|
AVC |
Отправлено: 08.06.2004, 11:16 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
2Gedeon Update часто можно использовать без ProcessMessages
Пример
CODE |
Lbl1->Caption = "";
Update();
for (int j = 1; j < 0x10000; j++)
{ for (int i=1; i < 0xF0000; i++);
Lbl1->Caption = AnsiString(j);
/* комментировать сдесь*/ // Update();
}
Lbl1->Caption = "Ok";
| |
|
Gedeon |
Отправлено: 08.06.2004, 11:38 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (AVC @ 08/06/2004, 12:18) | 2Gedeon Update часто можно использовать без ProcessMessages
Пример
CODE |
Lbl1->Caption = "";
Update();
for (int j = 1; j < 0x10000; j++)
{ for (int i=1; i < 0xF0000; i++);
Lbl1->Caption = AnsiString(j);
/* комментировать сдесь*/ // Update();
}
Lbl1->Caption = "Ok";
|
|
Да я то и не против этого, написано для конкретно этого случая. Вообще говоря выбор того или иного метода зависит от расчетов и самой формы(че и сколько надо перерисовывать).
|
|
AVC |
Отправлено: 08.06.2004, 11:47 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE | Вообще говоря выбор того или иного метода зависит от расчетов и самой формы(че и сколько надо перерисовывать). |
Полностью поддерживаю. Владеть надо если не всем, то многим, а использовать то что удобнее сейчас. |
|
klen |
Отправлено: 08.06.2004, 12:24 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Все это конечно хорошо. Но если расчетов много, например статистика какогонибудь иммитационного моделирования набирается, то лишний выхов ProcessMessages или Update — не пришли ли сообщения в очередь. Причем беда в том что куча сообщений приходит, выбирается из очереди, анализируется и тут.....оказывается что на него 99% их еагировать программе не надо. ИХМО надо поток делать отдельный для вычислений, а его функцию на асме писать:). Проверял по скорости (моделировал сопровождение цели РЛС — свои замудки), в общем и целом так — как выше сказано 42 минуты считалось, переписал с отдельным потоком — 24 минуты, почти в два раза быстрее. Теперь только так делаю.
ЗЫ. Если это детские расчеты — ProcessMessages однозначно и не парится. |
|
Gedeon |
Отправлено: 08.06.2004, 13:06 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ну и опять же все от расчетов зависит. Вот про это тема тут мусолиться на примере загрузки проца чтением файлов.
|
|
Георгий |
Отправлено: 08.06.2004, 23:27 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
QUOTE | Проверял по скорости (моделировал сопровождение цели РЛС — свои замудки), в общем и целом так — как выше сказано 42 минуты считалось, переписал с отдельным потоком — 24 минуты, почти в два раза быстрее | а поток через Win32API или TThread? Дело в том, что Win32API быстрее ~%30 чем TThread. |
|