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

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
NewAndrey   (2003-02-05 20:02) [0]

Проблема в следующем: в цикле идут некоторые вычисления и в ProgressBar-е отображается текущее состояние вычислений, при этом кнопка "Отмена", находящаяся на этой форме, становится "парализованой" и не реагирует на попытки ее нажать. Можно ли
как-то, без переноса вычислений в другую нить, отслеживать нажатие кнопки "Отмена"?


 
DJ_Sedoy   (2003-02-05 20:10) [1]

В цикле просто поставить Application.ProcessMessages , это даст приложению процессорного времени на обработку сообщений из очереди.


 
Palladin   (2003-02-05 20:10) [2]

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


 
Palladin   (2003-02-05 20:12) [3]

2 DJ_Sedoy
Application.ProcessMessages у меня тоже не помогало...


 
Юрий Федоров   (2003-02-05 20:12) [4]

Palladin © (05.02.03 20:10)
ИМХО Потоки в ряде случаев являются неоправданным усложнением.
Если вычисления по прикладной важности могут выполняться в главном потоке, Application.ProcessMessages то что нужно


 
DJ_Sedoy   (2003-02-05 20:22) [5]


> Palladin © (05.02.03 20:12)
> 2 DJ_Sedoy
> Application.ProcessMessages у меня тоже не помогало...

Надо помнить, что такое ProcessMessages. Естественно, это не панацея, но в случае длинного цикла с вычислениями, это решение оптимально. Естественно, не имеет смысла ставить это перед циклом или после. Короткий пример:

for i:=0 to 10000 do
Begin
S:=............
Application.ProcessMessages; //Дадим времени на обработку сообщений из очереди.
end;



 
Palladin   (2003-02-05 20:35) [6]

Ну конечно же я не буду ставить ProcessMessages перед циклом или после него. Я предполагаю что в данном случае идут сложные вычисления и более сложный алгоритм чем цикл. В этом случае можно, и наверное даже нужно, вынести в отдельный поток. А в цикле ессно можно обойтись и ProcessMessages, и тоже смотря в каком.


 
DJ_Sedoy   (2003-02-05 20:37) [7]

Логично. если операция одна и занимает много проц. времени, тогда необходимо ей thread отдельный.


 
Anatoly Podgoretsky   (2003-02-05 20:39) [8]

Потоки нужны тогда, когда должны проводиться паралельные вычисления.



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

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

Наверх





Память: 0.45 MB
Время: 0.012 c
14-38455
Makhanev A.S.
2003-01-30 15:54
2003.02.13
Delphi6 Update Pack#2


1-38257
Vitus
2003-02-05 11:55
2003.02.13
Как определить, что компонент is DataControl?


3-38050
AlexAlex2
2003-01-28 11:18
2003.02.13
Редактируемый DBGrid на компонентах dbExpress для Informix


3-38140
Ihtiandr
2003-01-28 17:48
2003.02.13
DBGrid


1-38379
Юный_программер
2003-02-02 16:11
2003.02.13
Как на форме вытаскивать иконку то одну а то другую?





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