![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правельно ли я понял по поводу 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]Неправильно.