|
|
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
А вот таким образом правильно будет по завершении работы потока получить из него результат выполнения (id первой обновленной записи)? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Или такой код приведет к открытию потока и немедленному его уничтожению? Если что, код самого Create примерно такой: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 15:51 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
В общем нужно после отрабатывания всех SQL-запросов, которые засунуты в поток (после завершения работы потока), обновить основную сетку с данными и позиционировать курсор (Locate) на ту запись, id которой будет храниться внутри потока. Как это грамотно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 15:55 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
svnvladКак это грамотно сделать? Посмотри туда https://github.com/wadman/wthread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 15:57 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
svnvladzinpubНу и добавь invalidate и sleep, раз в N-дцать записей Нет, все бесполезно, и sleep, и Repaint, и Application.ProcessMessages делал, не помогает. Лучше напишу поток. Куда тебе еще поток, ты прогрессбаром разобраться не можешь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 17:05 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Изначально вопрос был про ProgressBar. И вот этот пример кода показывает, что ProgressBar нормально отображается и без потоков и без каких-либо ProcessMessages() / Repaint() / Update() / Invalidate(). Надо смотреть подробнее. Сделайте вывод в логи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 17:12 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
schiYuRockпропущено... Перед Update еще Invalidate надо, я забыл, или сразу Repaint - он и то и то вызовет. Нафига ? SetPosition у ProgressBar и так объявляет недействительным нужные части окна.Если так (что логично и скорей всего, просто нет щас уозможности исходники посмотреть) - тогда не надо. Значит, ошибка в логике, и тогда ничего не поможет, кроме исправления её. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 22:32 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
svnvladТо ли сообщения не доходят, то ли не считает нужным немедленно на них реагировать.Нет, всё всегда работает в соответствие с жокументацией по винапи. За исключением редких багов, которые в основном давно вылизаны и пофикшены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 22:35 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
zinpubНу и добавь invalidate и sleep, раз в N-дцать записейслип бесполезен, а инвалидэйта мало - нужен апдейт. Так говорит документация, а жизнь показывает, что она не врет в данном случае. Так что тыкать пальцем в небо - просто потеря времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 22:37 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
zinpubПроблема в чём то ином, ProcessMessages для прогрессбара вполне достаточно, хотя и кривоватоНе достаточно, винда пошлет WM_PAINT только после того, как очередь освободится, а надо сразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 22:38 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
YuRockzinpubПроблема в чём то ином, ProcessMessages для прогрессбара вполне достаточно, хотя и кривоватоНе достаточно, винда пошлет WM_PAINT только после того, как очередь освободится, а надо сразу.Даже точнее так: после ProcessMessages винда пошлет WM_PAINT через PostMessage (добавит в очередь), но обработка этого сообщения не начнется сразу, т.к. пойдет выполнение дальнейшего кода программы, в итоге - окно с прогрессбаром не перерисуется (когда надо). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 22:43 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
YuRockYuRockпропущено... Не достаточно, винда пошлет WM_PAINT только после того, как очередь освободится, а надо сразу.Даже точнее так: после ProcessMessages винда пошлет WM_PAINT через PostMessage (добавит в очередь), но обработка этого сообщения не начнется сразу, т.к. пойдет выполнение дальнейшего кода программы, в итоге - окно с прогрессбаром не перерисуется (когда надо). Все правильно. КотовасияКуда тебе еще поток, ты прогрессбаром разобраться не можешь... Сами попробуйте обновлять прогрессбар в цикле MySQL. Сто раз уже такое встречал, что замораживается до конца цикла, просто руки не доходили основательно решить вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 22:57 |
|
||
|
Как в процессе исполнения ряда 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 при вызовах Вот вывод с "логированием" - логирование осуществляется вызовом функции ShowMessage. Как и ожидалось, все отображается. И не нужны даже Update с ProcessMessages. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 23:09 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Вторая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 23:09 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Третья ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 23:10 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 23:10 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
И это немудрено, во время висения диалоговых ShowMesage-й у программы достаточно времени, чтобы обработать все сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 23:12 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
svnvlad... КотовасияКуда тебе еще поток, ты прогрессбаром разобраться не можешь... Сами попробуйте обновлять прогрессбар в цикле MySQL. Сто раз уже такое встречал, что замораживается до конца цикла, просто руки не доходили основательно решить вопрос. Вот тебе код, повесь его "на кнопку", попробуй - заработает ли. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Если заработает - замени sleep(100) на свою работу с mySQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 23:13 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
тут вроде в правилах нет ограничений на ссылки я писал статью , где ваш случай подробно описан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 08:38 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Котовасияsvnvlad... пропущено... Сами попробуйте обновлять прогрессбар в цикле MySQL. Сто раз уже такое встречал, что замораживается до конца цикла, просто руки не доходили основательно решить вопрос. Вот тебе код, повесь его "на кнопку", попробуй - заработает ли. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Если заработает - замени sleep(100) на свою работу с mySQLВряд ли заработает. Тут та же проблема, что и у ТС, идентичная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 09:19 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
svnvlad Код: 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. выбросить код slow-by-slow и написать sp-процедуру предлагали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 11:05 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
YuRockYuRockпропущено... Не достаточно, винда пошлет WM_PAINT только после того, как очередь освободится, а надо сразу.Даже точнее так: после ProcessMessages винда пошлет WM_PAINT через PostMessage (добавит в очередь), но обработка этого сообщения не начнется сразу, т.к. пойдет выполнение дальнейшего кода программы, в итоге - окно с прогрессбаром не перерисуется (когда надо). https://docs.microsoft.com/en-us/windows/desktop/controls/create-progress-bar-controls Нет никаких Invalidate, Update и прочих действий. Где-то я читал (не найду сейчас), что ProgressBar отличается от остальных контролов тем, что при установке позиции он сам вызывает UpdateWindow ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 11:39 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
YuRockКотовасияпропущено... Вот тебе код, повесь его "на кнопку", попробуй - заработает ли. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Если заработает - замени sleep(100) на свою работу с mySQLВряд ли заработает. Тут та же проблема, что и у ТС, идентичная. Это рабочий код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 12:21 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
КотовасияYuRockпропущено... Вряд ли заработает. Тут та же проблема, что и у ТС, идентичная. Это рабочий код. Шаман однако. На кнопке код работал. Попробовал встроить в SQL-цикл. Тоже показал прогресс. Затем закомментировал этот код и оставил свой код как было, убрал даже ProcessMessages и Repaint где они были. Все заработало нормально. В коде НИЧЕГО не менял. Но вчера он не работал, а сегодня работает. Одно замечание - вчера работало все медленно, сегодня быстро, т.е. связь с сервером лучше. Вчера обработка 3 запросов занимала где-то 3 секунды, сегодня доли секунды. Может быть с этим связано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 23:37 |
|
||
|
Как в процессе исполнения ряда SQL-запросов отображать прогресс-бар? (thread?)
|
|||
|---|---|---|---|
|
#18+
Даже так - прежде, чем начал тестировать этот код, заметил, что мое окно с прогресс барами работает нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 23:38 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39710163&tid=2040313]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
187ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 509ms |

| 0 / 0 |
