Главная страница
    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.047 c
15-1204885877
Юрий Лосев
2008-03-07 13:31
2008.04.20
Найти количество нулевых бит в строке


15-1204975614
Михаил
2008-03-08 14:26
2008.04.20
Диалог выбора типа линии


2-1206701658
Ramzes001
2008-03-28 13:54
2008.04.20
Ошибка


2-1206540743
kiberg
2008-03-26 17:12
2008.04.20
Текст в DrawGrid е


15-1204961097
buzb
2008-03-08 10:24
2008.04.20
Где реально можно найти работу для программиста на delphi?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский