Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.20;
Скачать: [xml.tar.bz2];

Вниз

Как избежать подвисания программы, когда процедура выполняется   Найти похожие ветки 

 
Кен   (2003-11-07 03:39) [0]

давольно долго ? Не нажимаются кнопки, не обновляется её окно. То есть она как бы висит, но когда процедура выполнена, то всё приходит в норму.
Решается ли эта проблема или так и должно быть ?


 
Slavian   (2003-11-07 03:53) [1]

application.ProcessMessages;


 
Германн   (2003-11-07 03:56) [2]

Или Thread. Это в зависимости от задачи.


 
Кен   (2003-11-07 04:08) [3]


> Slavian © (07.11.03 03:53) [1]
> application.ProcessMessages;

Помогло. Только тормозить стало на пятнадцать процентов.
Этот ProcessMessages нельзя как нибудь отрегулировать, чтобы поменеше тормозило ?

А вообще можно ли работающуюу процедуру остановить в определённый момент нажатием кнопки ?


 
Думкин   (2003-11-07 05:03) [4]

1.Если не нравится, то юзай
> [2] Германн © (07.11.03 03:56).
Примеров тому - море.

2. Можно. Но не всегда сразу.


 
Anatoly Podgoretsky   (2003-11-07 08:49) [5]

1. Она почти не тормозит, а тормозит другое, обработчики разных событый, конечно можно реже вызывать, но тогда события будут накапливаться и результат возможно тотже

2. Можно


 
Fiend   (2003-11-07 09:34) [6]

Поддерживаю Anatoly Podgoretsky © (07.11.03 08:49) [5]

сделай чтобы она чуть реже вызывалась. я так понимаю у тебя там цикл большой? сделай чтобы она вызывалась не каждый раз, а скажем в каждую десятую итерацию.


 
Кен   (2003-11-08 01:26) [7]


> Германн © (07.11.03 03:56) [2]
> Или Thread. Это в зависимости от задачи.

Что то этот Thread какой то сложный. Я хотел, просто пару строчек добавлять в уже имеющиеся коды. А с этим Thread похоже придётся начинать новый огород городить.


> Anatoly Podgoretsky © (07.11.03 08:49) [5]
> 1. Она почти не тормозит, а тормозит другое, обработчики
> разных событый, конечно можно реже вызывать, но тогда события
> будут накапливаться и результат возможно тотже

Да. Вызывать реже - это выход. Причём что мне понравилось, можно запустить одну и туже процедуру второй раз, ещё до того, как закончил работать первый. Хотя можно это и блокировать пряча и потом показывая кнопку вызова процедуры.


> 2. Можно

А как ?
Я хочу визуально контролировать как там процедура работает, и когда она сделает то, что нужно, просто терменировать её.
Можно, конечно в саму процедуру встроить проверку какого нибудь isKeyDown(ESC), но мне хочется не лезть в код процедуры и везде вставлять проверки, а чтобы она вырубалась извне.


 
Slavian   (2003-11-08 02:39) [8]

чтобы по нажатию кнопки все прекратить сделай переменную типа Boolean, вставь оператор проверки в начало цикла типа так :
For i:0 to 100 do begin
...
if b then exit;
{.....}
end;
...
Button1.Click;
begin
b:=true;
end;


вот и всё!!!
а по быстрее.... можно использовать yeld {кажется так пишется, я не помню, не пользуюсь!}


 
Германн   (2003-11-08 03:09) [9]

С "этим Thread" действительно придется городить новый огород. Но тут уже тебе решать, что лучше для твоей задачи.


 
Кен   (2003-11-08 03:25) [10]


> Slavian © (08.11.03 02:39) [8]
> чтобы по нажатию кнопки все прекратить сделай переменную
> типа Boolean, вставь оператор проверки в начало цикла типа
> так :
> For i:0 to 100 do begin
> ...
> if b then exit;
> {.....}
> end;
> ...
> Button1.Click;
> begin
> b:=true;
> end;
>
> вот и всё!!!
> а по быстрее.... можно использовать yeld {кажется так пишется,
> я не помню, не пользуюсь!}

См. мой предшествующий постинг.
Если цикл не один, а их много подряд, то чего, сорок проверок вставлять ? Нехочу загромождать код этой суетой.
Хочу что-нибудь типа Снять задачу, только для процедуры. Как по ctrl+alt+delete . Или хотя бы ответ, возможно такое или нет ?


 
Ihor Osov'yak   (2003-11-08 03:34) [11]

> но мне хочется не лезть в код процедуры и везде вставлять проверки, а чтобы она вырубалась извне.

Можно, если процедура выполняется в отдельном потоке (Thread). Вырубить вместе с потоком. Но категорически не рекомендуется..

Зы - пересматривай архитектуру приложения.


 
Igorek   (2003-11-08 10:53) [12]

> Кен © (08.11.03 03:25) [10]
> Если цикл не один, а их много подряд, то чего, сорок проверок
> вставлять ? Нехочу загромождать код этой суетой.

Лучше уж делай проверки а не поток. Так будет быстрее сделать. А проверки можно организовать так: Делаешь все циклы в блоке try, потом вызываешь время от времени внутри процедуру напр. AssertTerminate, которая делает проверку и если надо терминировать - возбуждает исключение, которое ты обработаешь после блока try.


 
Lmz   (2003-11-08 11:50) [13]

Почитай нормальных книжек, типа книжку Тейксера и Пачеко. Главу про потоки и радуйся и не задавай глупых вопросов


 
Тохус   (2003-11-08 12:14) [14]

Удалено модератором
Примечание: Offtopic


 
Anatoly Podgoretsky   (2003-11-08 13:36) [15]

Кен © (08.11.03 01:26) [7]
Зачем две, вставляй одну! Application.ProcessMessages


 
mOOx_   (2003-11-08 15:05) [16]

Удалено модератором
Примечание: Offtopic



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.11.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
14-66104
VictorT
2003-10-28 22:05
2003.11.20
Ищется рассказ.


7-66142
Glajik
2003-09-12 20:37
2003.11.20
Подскажите где можно найти русскую инфу по Tapi


1-65832
FC
2003-11-08 22:26
2003.11.20
Запрет запуска программы


7-66146
Zero Ice
2003-09-11 17:43
2003.11.20
Printers


1-65997
Иришка
2003-11-09 21:29
2003.11.20
ScrollBar





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