|
|
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Процедура выполняет цикл обращения к базе, и в каждой итерации пытается обновлять прогресс-бар. Но он не движется. Лишь после окончания всего цикла бар обновляется и оказывается заполненным на 100%. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Вот например процедура обновления Position бара: Код: pascal 1. 2. 3. 4. 5. Результат на скриншотах (вначале бары полностью пустые, потом полностью заполнены, пошаговый прогресс не отображается). Напрашивается решения - засунуть в поток. Но что именно? Само окно с прогресс-барами или всю верхнюю процедуру? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 18:16 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
вот в конце что отображается: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 18:16 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Я не вижу где вы вызываете этот SetPosition3(). Вызов ProcessMessages() всей Application может быть излишним, попробуйте обойтись вызовом Repaint() окне содержащей ProgressBar (хотя по идее оно и само должно вызывать). Не совсем понятно - используются ли потоки сейчас? Версия Делфи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 18:40 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
svnvladНапрашивается решения - засунуть в поток. Но что именно? Само окно с прогресс-барами или всю верхнюю процедуру? Ответ очевиден: всю верхнюю процедуру. Поскольку окнами должен владеть только один поток. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 18:43 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
svnvlad Код: pascal 1. 2. Надо так: Код: pascal 1. 2. Выкрутка сообщений и не должна принудительно перерисовывать окна. Это делает функция UpdateWindow - send'ом присылает WM_PAINT с накопившимся инвалидированным прямоугольником. Если это не поможет - значит ошибка в логике кода (я его не смотрел). А вообще, естественно, надо переносить тяжелую работу в доп. поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 19:13 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
логика работы с прогрессами должна быть такой в главном потоке просто отображается форма и прогресс-бар в доп потоках проходит работа по обмену данными и время от времени в синхронизации дергается установка значений прогресса когда поток заканчивается, он приходит в обработчик OnTerminate и закрывает окно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 21:30 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
QTЯ не вижу где вы вызываете этот SetPosition3(). Вызов ProcessMessages() всей Application может быть излишним, попробуйте обойтись вызовом Repaint() окне содержащей ProgressBar (хотя по идее оно и само должно вызывать). Не совсем понятно - используются ли потоки сейчас? Версия Делфи? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Сейчас потоки не используются. Delphi 2010. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 23:45 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
YuRocksvnvlad Код: pascal 1. 2. Надо так: Код: pascal 1. 2. Не помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 23:50 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
krapotkinлогика работы с прогрессами должна быть такой в главном потоке просто отображается форма и прогресс-бар в доп потоках проходит работа по обмену данными и время от времени в синхронизации дергается установка значений прогресса когда поток заканчивается, он приходит в обработчик OnTerminate и закрывает окно Можно ли окно создать внутри конструктора потока, до запуска Start? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 06:04 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 08:39 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
svnvladМожно ли окно создать внутри конструктора потока, до запуска Start? Можно, но без VCL. Тогда поток будет честно обрабатывать в себе сообщения извне для этого окна. Но это не для тебя, т.к. твой поток будет все время занят. В общем, придется программировать. Окно создавать вне потока, а поток будет сообщать о своем прогрессе, как и положено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 08:41 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
svnvladYuRockпропущено... Надо так: Код: pascal 1. 2. Не помогает.Перед Update еще Invalidate надо, я забыл, или сразу Repaint - он и то и то вызовет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 09:58 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
wadmansvnvladМожно ли окно создать внутри конструктора потока, до запуска Start? Можно, но без VCL. Тогда поток будет честно обрабатывать в себе сообщения извне для этого окна. Но это не для тебя, т.к. твой поток будет все время занят. В общем, придется программировать. Окно создавать вне потока, а поток будет сообщать о своем прогрессе, как и положено.Ну почему, конструктор же - это еще главный поток. Можно, конечно. А вот в execute уже будет долгая операция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 10:02 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
YuRockНу почему, конструктор же - это еще главный поток. Какой тогда смысл в этом окошке? Я просто смотрю в ХШ. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 10:03 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
YuRocksvnvladпропущено... Не помогает.Перед Update еще Invalidate надо, я забыл, или сразу Repaint - он и то и то вызовет. Нафига ? SetPosition у ProgressBar и так объявляет недействительным нужные части окна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 10:09 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
В данном случае поток это оверхед. Код нормальный, почему не работает как надо - непонятно. Пример ведет себя как надо Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Попробуй логировать ChangedCount при вызовах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 10:34 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
По теме. Если надо именно окошко в отдельном thread их есть у меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 10:43 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Докsvnvlad, ты, вроде, уже тут наспрашивал на 4 страницы. Мало? Вы что-то путаете. Я на тот форум не заходил.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 14:25 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
wadmanYuRockНу почему, конструктор же - это еще главный поток. Какой тогда смысл в этом окошке? Я просто смотрю в ХШ. :) Эээ... отображать прогресс цикла выполнения SQL-запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 14:27 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Василий 2В данном случае поток это оверхед. Код нормальный, почему не работает как надо - непонятно. Пример ведет себя как надо Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Попробуй логировать ChangedCount при вызовах Все правильно. При sleep или точках останова все обновляется. Но попробуйте вызвать обновление изнутри цикла выполнения SQL-запросов - все время потока занимают SQL-запросы, VCL не успевает обновляться. То ли сообщения не доходят, то ли не считает нужным немедленно на них реагировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 14:29 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Ну и добавь invalidate и sleep, раз в N-дцать записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 14:36 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
svnvladТо ли сообщения не доходят, то ли не считает нужным немедленно на них реагировать. Создал модальное окно, запустил поток. Поток шлет свой счетчик этому окну. Поток закончился, окно закрылось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 15:07 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Было, делал... Модальное окно, которое по таймеру читало из БД значение прогресса. т.к. Процедура была на той стороне, да ещё и в много потоков запускалась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 15:17 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
zinpubНу и добавь invalidate и sleep, раз в N-дцать записей Нет, все бесполезно, и sleep, и Repaint, и Application.ProcessMessages делал, не помогает. Лучше напишу поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 15:22 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39709866&tid=2040313]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
89ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 550ms |

| 0 / 0 |
