Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правельно ли я понял по поводу Application.Processmessages; ?


webSQLNeederr ©   (2008-03-24 13:29:00) 

Что бы программа не подвисала во время выполнения циклов то необходимо в тело КАЖДОГО цикла вставлять Application.Processmessages; ?


Плохиш   (2008-03-24 15:53:00) [1]


> webSQLNeederr   (24.03.08 14:04) [15]
> И как все это поправить?

Т.к. до сих пор никто не подсказал, подсказываю, для начала надо исправить ошибку в 17й строке.


Leonid Troyanovsky   (2008-03-24 14:34:00) [2]


> {RASkov} ©   (24.03.08 14:07) [17]

> Но это, еще раз, плохой вариант...)

А зачем плохой, если можно сделать прилож. консольным.

--
Regards, LVT.


{RASkov}   (2008-03-24 14:08:00) [3]

т.е. наоборот)


{RASkov}   (2008-03-24 14:07:00) [4]

> [15] webSQLNeederr   (24.03.08 14:04)

См в сторону дополнительны потоков... или как никудышный вариант делай:
Application.Processmessages;
Invalidate;

Но это, еще раз, плохой вариант...)


Сергей М.   (2008-03-24 14:05:00) [5]


> потом пытаюсь развернуть окно и вместо формы белый прямоугольник


Про wm_paint тебе уже объяснили.
А теперь попробуй ухватиться мышью за заголовок нормально развернутой формы и поелозить ей по десктопу.

Ну как, "все ок" ? Или на этот раз она "остро зависает" ?)


webSQLNeederr   (2008-03-24 14:04:00) [6]

И как все это поправить? Что бы моя программа могла работать как и все остальные - захотел свернул, а не сидеть ждать и смотреть пока моя программа не выполнит свои действия ...


{RASkov}   (2008-03-24 14:02:00) [7]

добавлю, что данное сообщение отрабатывается только самое последнее из очереди, остальные все пропускаются...


{RASkov}   (2008-03-24 14:01:00) [8]

> [11] webSQLNeederr   (24.03.08 13:58)

Сообщение о перерисовки (WM_PINT) имеет низкий приоритет... и это правильно ибо это медленная операция...


{RASkov}   (2008-03-24 14:00:00) [9]

> [9] webSQLNeederr   (24.03.08 13:53)
> Да, но мне не понятным остается из-за чего при сворачивании
> программы она тупо зависает

Обычно наоборот, свернутая работает быстрее, например из-за того, что когда свернута, время не тратится на обновление интерфейса программы :)


webSQLNeederr   (2008-03-24 13:58:00) [10]


> Это как ?

Сворачиваю окно, потом пытаюсь развернуть окно и вместо формы белый прямоугольник


Сергей М.   (2008-03-24 13:56:00) [11]


> она тупо зависает


Это как ?


webSQLNeederr   (2008-03-24 13:53:00) [12]

Да, но мне не понятным остается из-за чего при сворачивании программы она тупо зависает, а если оставлять работать ее развернутой то все ок. С чем обычно может быть это связано? У вас же опыта больше в Делфи, наверняка вы встречались с такой ерундой.


Оригинал   (2008-03-24 13:51:00) [13]

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


Оригинал   (2008-03-24 13:49:00) [14]


> Мне подсказали что нужно в цикл кинуть Application.Processmessages;


Смотря какой цикл.

Вот если такой:
for i := 1 to 100000 do
begin
//Здесь короткие расчеты
   Application.ProcessMessages;
end;


то замедление твойего приложения будет чудовищным.

Если изменить его так:
for i := 1 to 100000 do
begin
//Здесь короткие расчеты
   if (i mod 1000) = 0 then Application.ProcessMessages;
end;


то будет совсем бругой коленкор.

А если вместо
//Здесь короткие расчеты
будут
//Здесь долгие расчеты,

то тогда можно и в каждой итерации цикла выполнять Application.ProcessMessages;


{RASkov}   (2008-03-24 13:49:00) [15]

> [4] webSQLNeederr   (24.03.08 13:43)

Ну точно [1] :)

Я тебе только скажу, что данная "штука" дает возможность отработать винсообщения из накопившейся очереди....
Но вызов ее также сказывается на скорости цикла(если в цикле вызывать, т.е. замедляет)...
Еще есть дополнительные потоки.... никто тебе здесь подробно рассказывать не о чем не будет...
Задай конкретный вопрос и возможнополучишь ответ.


Сергей М.   (2008-03-24 13:47:00) [16]


> Мне подсказали что нужно в цикл кинуть Application.Processmessages;


Тебе подсказали правильно только для случая, если твой алгоритм (циклический или линейный - не суть как важно) выполняется в основном потокеVCL-приложения, т.е. для частного случая.


webSQLNeederr   (2008-03-24 13:43:00) [17]

Обьясните тогда пожалуйста как ею пользоваться?

Просто у меня есть код, в нем исполняется цикл. Цикл имеет вид: загружается из тхт файла строки потом программа обрабатывает эти строки и в зависимости от строк создает на диске столько файлов сколько и строк. Проблема в том если я сверну программу то она зависает. А если дождаться окончания то все ок.

Мне подсказали что нужно в цикл кинуть Application.Processmessages;

Подскажите тогда как сделать так что бы моя программа работала в свернутом режиме ...


{RASkov}   (2008-03-24 13:38:00) [18]

> не повиснет..)

наверное я хотел сказать:
*не поДвиснет
Какая разница.... все равно шутка была :)


{RASkov}   (2008-03-24 13:36:00) [19]

> [0] webSQLNeederr   (24.03.08 13:29)

Ага. Правильно. Давай, вставляй данную инструкцию после каждой! строки в коде.... ваще прога никогда не повиснет..)
:о)
Ну а понял ты конечно же [1] скорее всего :)


Сергей М.   (2008-03-24 13:30:00) [20]

Неправильно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо