Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.13;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
6-38413
Oskolok
2002-12-22 19:24
2003.02.13
Как послать e-mail без специальных компонентов?


1-38159
Suharew
2003-02-04 14:46
2003.02.13
Помогите ПОЖАЛУЙСТА -- Label


3-38085
Демонов Е.В.
2003-01-27 13:01
2003.02.13
Ворос О BDE


14-38551
Stager
2003-01-26 22:02
2003.02.13
Поиск утечек памяти


1-38242
Сергей
2003-02-05 10:33
2003.02.13
ошибка в ActionMainMenuBar при работе с MDIChild окнами