![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
---|Ветка была без названия|---
NewAndrey © (2003-02-05 20:02:00)Проблема в следующем: в цикле идут некоторые вычисления и в ProgressBar-е отображается текущее состояние вычислений, при этом кнопка "Отмена", находящаяся на этой форме, становится "парализованой" и не реагирует на попытки ее нажать. Можно ли
как-то, без переноса вычислений в другую нить, отслеживать нажатие кнопки "Отмена"?
Anatoly Podgoretsky (2003-02-05 20:39:00) [1]Потоки нужны тогда, когда должны проводиться паралельные вычисления.
DJ_Sedoy (2003-02-05 20:37:00) [2]Логично. если операция одна и занимает много проц. времени, тогда необходимо ей thread отдельный.
Palladin (2003-02-05 20:35:00) [3]Ну конечно же я не буду ставить ProcessMessages перед циклом или после него. Я предполагаю что в данном случае идут сложные вычисления и более сложный алгоритм чем цикл. В этом случае можно, и наверное даже нужно, вынести в отдельный поток. А в цикле ессно можно обойтись и ProcessMessages, и тоже смотря в каком.
DJ_Sedoy (2003-02-05 20:22:00) [4]
> 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:12:00) [5]2 DJ_Sedoy
Application.ProcessMessages у меня тоже не помогало...
Юрий Федоров (2003-02-05 20:12:00) [6]Palladin © (05.02.03 20:10)
ИМХО Потоки в ряде случаев являются неоправданным усложнением.
Если вычисления по прикладной важности могут выполняться в главном потоке, Application.ProcessMessages то что нужно
DJ_Sedoy (2003-02-05 20:10:00) [7]В цикле просто поставить Application.ProcessMessages , это даст приложению процессорного времени на обработку сообщений из очереди.
Palladin (2003-02-05 20:10:00) [8]ИМХО. Вряд ли. Ибо приложение занято вычислениями и сообщение о нажатии Отмена оно исполнит после выхода из процедуры вычислений.
Потоки, потоки и еще раз потоки. Не гоже основному потоку заниматся вычислениями, он с пользователем работать должен.