Главная страница
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.52 MB
Время: 0.015 c
2-1206330334
Xmen
2008-03-24 06:45
2008.04.20
Запрос по соединению данных.


15-1204510679
TUser
2008-03-03 05:17
2008.04.20
Декриптинг


15-1205082091
who
2008-03-09 20:01
2008.04.20
Игорь Шевченко


15-1204908345
@!!ex
2008-03-07 19:45
2008.04.20
Комп не грузится


2-1206716738
Kolan
2008-03-28 18:05
2008.04.20
Не удается присвоить значение полю структуры в объекте.