Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];
ВнизПравельно ли я понял по поводу Application.Processmessages; ? Найти похожие ветки
← →
webSQLNeederr (2008-03-24 13:29) [0]Что бы программа не подвисала во время выполнения циклов то необходимо в тело КАЖДОГО цикла вставлять Application.Processmessages; ?
← →
Сергей М. © (2008-03-24 13:30) [1]Неправильно.
← →
{RASkov} © (2008-03-24 13:36) [2]> [0] webSQLNeederr (24.03.08 13:29)
Ага. Правильно. Давай, вставляй данную инструкцию после каждой! строки в коде.... ваще прога никогда не повиснет..)
:о)
Ну а понял ты конечно же [1] скорее всего :)
← →
{RASkov} © (2008-03-24 13:38) [3]> не повиснет..)
наверное я хотел сказать:
*не поДвиснет
Какая разница.... все равно шутка была :)
← →
webSQLNeederr (2008-03-24 13:43) [4]Обьясните тогда пожалуйста как ею пользоваться?
Просто у меня есть код, в нем исполняется цикл. Цикл имеет вид: загружается из тхт файла строки потом программа обрабатывает эти строки и в зависимости от строк создает на диске столько файлов сколько и строк. Проблема в том если я сверну программу то она зависает. А если дождаться окончания то все ок.
Мне подсказали что нужно в цикл кинуть Application.Processmessages;
Подскажите тогда как сделать так что бы моя программа работала в свернутом режиме ...
← →
Сергей М. © (2008-03-24 13:47) [5]
> Мне подсказали что нужно в цикл кинуть Application.Processmessages;
Тебе подсказали правильно только для случая, если твой алгоритм (циклический или линейный - не суть как важно) выполняется в основном потоке VCL-приложения, т.е. для частного случая.
← →
{RASkov} © (2008-03-24 13:49) [6]> [4] webSQLNeederr (24.03.08 13:43)
Ну точно [1] :)
Я тебе только скажу, что данная "штука" дает возможность отработать винсообщения из накопившейся очереди....
Но вызов ее также сказывается на скорости цикла(если в цикле вызывать, т.е. замедляет)...
Еще есть дополнительные потоки.... никто тебе здесь подробно рассказывать не о чем не будет...
Задай конкретный вопрос и возможно получишь ответ.
← →
Оригинал (2008-03-24 13:49) [7]
> Мне подсказали что нужно в цикл кинуть 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;
← →
Оригинал (2008-03-24 13:51) [8]Я бы выполнял расчеты в отдельном потоке.
Конечно, для этого надо изучить работу с доп. потоками. Но оно того стоит.
← →
webSQLNeederr (2008-03-24 13:53) [9]Да, но мне не понятным остается из-за чего при сворачивании программы она тупо зависает, а если оставлять работать ее развернутой то все ок. С чем обычно может быть это связано? У вас же опыта больше в Делфи, наверняка вы встречались с такой ерундой.
← →
Сергей М. © (2008-03-24 13:56) [10]
> она тупо зависает
Это как ?
← →
webSQLNeederr (2008-03-24 13:58) [11]
> Это как ?
Сворачиваю окно, потом пытаюсь развернуть окно и вместо формы белый прямоугольник
← →
{RASkov} © (2008-03-24 14:00) [12]> [9] webSQLNeederr (24.03.08 13:53)
> Да, но мне не понятным остается из-за чего при сворачивании
> программы она тупо зависает
Обычно наоборот, свернутая работает быстрее, например из-за того, что когда свернута, время не тратится на обновление интерфейса программы :)
← →
{RASkov} © (2008-03-24 14:01) [13]> [11] webSQLNeederr (24.03.08 13:58)
Сообщение о перерисовки (WM_PINT) имеет низкий приоритет... и это правильно ибо это медленная операция...
← →
{RASkov} © (2008-03-24 14:02) [14]добавлю, что данное сообщение отрабатывается только самое последнее из очереди, остальные все пропускаются...
← →
webSQLNeederr (2008-03-24 14:04) [15]И как все это поправить? Что бы моя программа могла работать как и все остальные - захотел свернул, а не сидеть ждать и смотреть пока моя программа не выполнит свои действия ...
← →
Сергей М. © (2008-03-24 14:05) [16]
> потом пытаюсь развернуть окно и вместо формы белый прямоугольник
Про wm_paint тебе уже объяснили.
А теперь попробуй ухватиться мышью за заголовок нормально развернутой формы и поелозить ей по десктопу.
Ну как, "все ок" ? Или на этот раз она "остро зависает" ?)
← →
{RASkov} © (2008-03-24 14:07) [17]> [15] webSQLNeederr (24.03.08 14:04)
См в сторону дополнительны потоков... или как никудышный вариант делай:Application.Processmessages;
Invalidate;
Но это, еще раз, плохой вариант...)
← →
{RASkov} © (2008-03-24 14:08) [18]т.е. наоборот)
← →
Leonid Troyanovsky © (2008-03-24 14:34) [19]
> {RASkov} © (24.03.08 14:07) [17]
> Но это, еще раз, плохой вариант...)
А зачем плохой, если можно сделать прилож. консольным.
--
Regards, LVT.
← →
Плохиш © (2008-03-24 15:53) [20]
> webSQLNeederr (24.03.08 14:04) [15]
> И как все это поправить?
Т.к. до сих пор никто не подсказал, подсказываю, для начала надо исправить ошибку в 17й строке.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.047 c