Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.298 c
15-1204718166
pasha_golub
2008-03-05 14:56
2008.04.20
Алгоритмы компановки (расстановки, layout) графов


2-1206695301
asdf2
2008-03-28 12:08
2008.04.20
Это глюк в IBExpert e?


2-1206372200
Thrasher
2008-03-24 18:23
2008.04.20
Код цвета.


2-1206545585
MikeLevinN
2008-03-26 18:33
2008.04.20
far


2-1206527464
MSD
2008-03-26 13:31
2008.04.20
Вопрос по копированию





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский