Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.20;
Скачать: CL | DM;

Вниз

Правельно ли я понял по поводу 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
2-1206621875
БарЛог
2008-03-27 15:44
2008.04.20
Сохранение части скриншота


15-1204735704
Zeqfreed
2008-03-05 19:48
2008.04.20
Подскажите, пожалуйста, аудиоплеер на флэше


2-1206218273
Igor23
2008-03-22 23:37
2008.04.20
онлайн игра


15-1204656429
Fredy314
2008-03-04 21:47
2008.04.20
как можно создавая многотомный архив, создать только второй том?


15-1204686710
Slider007
2008-03-05 06:11
2008.04.20
С днем рождения ! 5 марта 2008 среда