![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| 14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 2 Всего: 5 |
Доброго времени суток, уважаемые программеры.
Столкнулся со следующей проблемой: Моя программа обрабатывает довольно объемную базу данных, и это занимает определенное время. Хочу сделать визуализацию загрузки, то бишь анимацию либо сплеш. У меня не получается это сделать, поскольку в то время как прога обрабатывает свои данные, форма не перерисовывается. Хотелось бы хотя бы анимацию. Я так понимаю, нужно организовать отдельный поток. Только я в этом полный профан. Жду вашей помощи. Заранее благодарю. |
|||
|
||||
| niteo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.11.2006 Где: Брянск Репутация: нет Всего: 1 |
Если обработка идет в цикле, то на каждую итерацию пиши
--------------------
Мне чужого лишнего не нада.Ешь ананасы, рябчиков жуй,день твой последний приходит, буржуй... |
|||
|
||||
| 14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 2 Всего: 5 |
во первых, что это даст?
а во-вторых, у меня там несколько отдельных процедур, в каждой хватает циклов, а в некоторых циклах еще циклы есть. или то что ты предложил, поможет и так? |
|||
|
||||
| niteo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.11.2006 Где: Брянск Репутация: нет Всего: 1 |
Эта команда заставляет твоё приложение прочитать очередь сообщений, и выполнить их. Это позволяет "оживлять окно" приложения. Везде засовывать ее не надо, поставь в те циклы, которые дольше всего работают.
Это сообщение отредактировал(а) niteo - 26.11.2010, 13:35 --------------------
Мне чужого лишнего не нада.Ешь ананасы, рябчиков жуй,день твой последний приходит, буржуй... |
|||
|
||||
| 14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 2 Всего: 5 |
спасибо, попробую.
только я не уверен, что с анимацией получится. я использую JvGifAnimator, и когда перед выполнением процедур его включаю (должна быть анимация), компонент не шевелится. кстати, ты не в курсе, почему этот компонент прячется под всеми визуальными компонентами? не могу его вытащить наверх. пробую и его наверх ставить, и те, которые его закрывают, пробую вниз тянуть. не получается. |
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Ну processmessages(в основном потоке), помогает в самых простых случаях. Если у тебя "тяжёлые" запросы то processMessages тут бессилен. Либо обновляй базу в отдельном потоке, либо в отдельном потоке вызывай processmessages
|
|||
|
||||
| 14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 2 Всего: 5 |
если уж речь зашла о потоках, как мне сделать 2 разных потока, чтобы в одном выполнялись процедуры, а второй крутил анимацию и давал понять этим, что прога в данный момент занимается обработкой данных.
|
|||
|
||||
| imageman |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 30.9.2004 Репутация: 1 Всего: 1 |
простой (относительно) путь - поставить библиотеку jvcl и использовать TJVThread (компонент бросить на форму).
там определяешь метод Execute - это все твои процедуры, которые долго работают и на кнопку вешаешь JvThread1.Execute(Self); Начиная с этого момента создается отдельный поток, в котором будет выполнятся твой метод Execute Только из Execute нельзя напрямую вызывать никакие процедуры, которые меняют визуальные компоненты (только через синхронизацию[synchonize]) Можно несколько раз запустить JvThread1.Execute(Self); и тогда будет создано несколько потоков, которые будут крутить твою процедуру. А можешь посмотреть http://andy.jgknet.de/blog/bugfix-units/as...function-calls/ там с примерами и (вроде) ещё проще. |
|||
|
||||
| 14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 2 Всего: 5 |
спасибо, попробую предложенные варианты
|
|||
|
||||
| 14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 2 Всего: 5 |
Application.ProcessMessages помогло. Воткнул перед выполнением каждой процедуры, а также в наиболее громоздкие циклы.
Спасибо. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |