|
4097 / 2702 / 590
Регистрация: 11.09.2009
Сообщений: 9,632
|
|
В Caption "(не отвечает), Progress Bar не перерисовывается. Как исправить?26.11.2025, 19:34. Показов 8609. Ответов 102
Метки нет (Все метки)
Старое однопоточное приложение, Delphi 7, исходник есть.
В нём Progress Bar, показывающий процент выполнения вывода по USB. Процесс занимает секунд 20-40. Примерно 50 на 50, примерно посередине времени выполнения процесса, система (Windows 7) замораживает форму, скачком чуть смещает её вправо и вниз на десяток пикселей, в её Caption система добавляет "(не отвечает)", перерисовки Progress Bar естественно нет. Причём программа прекрасно продолжает правильно работать, после завершения функции вывода по USB, форма "размораживается", и программа продолжает дальше работать. Можно ли исправить такое "поведение" каким-нибудь простым "костылём"? Очень уж не хочется всю эту программу переписывать под потоки. Видимо с этим уже пытались бороться, - есть Application.Process_Messages в местах смены значения Progress Bar.
0
|
|
| 26.11.2025, 19:34 | |
|
Ответы с готовыми решениями:
102
Как работает Progress Bar Как связать FTP и progress bar? |
|
Злостный нарушитель
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,895
|
||||||||
| 12.02.2026, 20:43 | ||||||||
|
[censored]
1
|
||||||||
|
2 / 2 / 0
Регистрация: 28.11.2025
Сообщений: 29
|
|
| 16.04.2026, 16:32 | |
|
Способ с двойным вызовом цикла обработки сообщений лишь увеличивает время, чтобы перерисовать форму и тп. Гарантии, что подвисать не будет - нет. Тогда 3 раза вызывать?
0
|
|
|
10 / 10 / 0
Регистрация: 10.05.2021
Сообщений: 33
|
|
| 18.05.2026, 08:50 | |
|
Можно я выскажусь свежим взглядом?
![]() Во-первых, если уж вы пишете в основном потоке некий разумный код, то какого фига, вы вместо того, чтобы использовать .Repaint() пытаетесь использовать .ProcessMessages()? Вы понимаете, что он не просто перерисует вам форму, а пройдёт по всем событиям, а соответственно - нажатия кнопок, события клавиатуры, всё это будет обработано. Во-вторых, что сложного написать поток и одну процедуру обработки аля procedure ... (var Message: TMessage); message WM_USER + 1? А из потока отправляйте любые данные через PostMessage. Вы получите полностью независимые потоки исполнения, которые никаким образом не затормозят друг друга. Ну, и в-третьих, а вы подумали о конечных пользователях? У вас-то на машинке это может работать с двумя ProcessMessages, а там может и с пятью не заработать, потому что заср..но офисными игрушками, трижды переставленными офисами и ещё чем только нет ещё ![]() Сделайте уже правильный вариант, для вас - два-три часа работы, а для конечного пользователя - гораздо надёжный и стабильный софт. Простите, если кого-то обидела, но наболело %) Я с таким вот уже сталкивалась, и мне, как админу, было жутко стыдно объяснять почему плагины отчётов виснут и никак это не поправить...
2
|
|
|
10 / 10 / 0
Регистрация: 10.05.2021
Сообщений: 33
|
|
| 18.05.2026, 09:00 | |
|
Таб + энтер
Простите
0
|
|
|
-293 / 14 / 1
Регистрация: 02.07.2021
Сообщений: 393
|
||||||
| 18.05.2026, 14:33 | ||||||
|
1) Через таймер, кинуть его на форму, интервал задать 500 мс. Вкл и выкл вручную. Универсальное решение.
0
|
||||||
|
|
|||
| 18.05.2026, 17:06 | |||
![]() Длительные операции, подвешивающие поток UI (выполняющиеся более нескольких миллисекунд), следует выносить в отдельные потоки. Никакие таймеры от этого не спасут, так они они оправляют запрос на выполнение кода в тот же самый поток UI.
0
|
|||
|
-293 / 14 / 1
Регистрация: 02.07.2021
Сообщений: 393
|
||||
| 18.05.2026, 17:25 | ||||
|
Таймер не замораживает Винду, это главное и точно не заглючит. Или 2 вариант, пишется быстро и точно не заглючит, вообще нет паузы в миллисекундах.
0
|
||||
|
|
||||
| 18.05.2026, 17:40 | ||||
|
0
|
||||
|
-293 / 14 / 1
Регистрация: 02.07.2021
Сообщений: 393
|
||
| 18.05.2026, 17:44 | ||
|
Человеку надо проще, без переписывания кода, простейший костыль требуется. Не надо его толкать к яме, там и погибнет.
0
|
||
|
|
|
| 18.05.2026, 17:52 | |
|
Потоки для профессионала не сложны. Не настолько, чтобы говнокодить, как новичок. И если бы сделали сразу нормально, этой темы бы не было.
Проблемы же предлагаемых вами костылей известны заранее.
0
|
|
|
-293 / 14 / 1
Регистрация: 02.07.2021
Сообщений: 393
|
|||
| 18.05.2026, 17:57 | |||
|
За 40 сек скачать дамп человеку надо. Пусть будет 40+1 сек с таймером. Еще раз цитата. Именно про ПОТОКИ
0
|
|||
|
|
||
| 18.05.2026, 18:05 | ||
|
Следуя методологии херакс-херакс-и-в-продакшн, можно было "исправить" ещё проще: перед запуском процесса нарисовать на форме текст "Если программа покажется зависшей, просто подождите, всё нормально!" Никаких потоков и даже таймеров.
1
|
||
|
-293 / 14 / 1
Регистрация: 02.07.2021
Сообщений: 393
|
|
| 18.05.2026, 18:12 | |
|
Rius,
Все равно тема некропост, автор уже забыл что спрашивал. Лучше частями качать, чтобы не думать и не искать потом ошибки, потом пнуть что нужно и заново цикл, это на 200% надежнее
0
|
|
|
2 / 2 / 0
Регистрация: 28.11.2025
Сообщений: 29
|
|
| 19.05.2026, 12:40 | |
|
Странные споры. Потоки (нити) - самое правильное, простое и безопасное решение. Программист должен это освоить, ибо там нет никаких адских премудростей. При чём, в отдельном (не главном) потоке можно запускать не только долгую операцию, но и форму с ProgressBar. Главное разнести исполнение так, чтобы многозадачная ОС сама позаботилась о том, чтобы разный код не тормозил друг друга.
0
|
|
|
-293 / 14 / 1
Регистрация: 02.07.2021
Сообщений: 393
|
||||
| 19.05.2026, 14:40 | ||||
|
Проще завернуть в цикл и тестить не надо, по коду видно, где накосячил. Изначально понятно, что если просто отдать управление Винде, это может не сработать. А 2-3 раза подряд это делать, это уже глупость. Вот с таймером конечно засада, может не сработать, но это быстро решается. Так что только цикл. Или таймер, выбрать что больше нравится.
0
|
||||
|
|
||
| 19.05.2026, 14:43 | ||
|
Потому что у иных методов есть заранее и давным-давно известные проблемы. Поэтому тема и возникла. И только запуск отдельного потока или процесса - и правильный, и достаточно простой при этом для не чайника.
0
|
||
|
-293 / 14 / 1
Регистрация: 02.07.2021
Сообщений: 393
|
||
| 19.05.2026, 15:05 | ||
|
Недавно запустил игрушку, она начала грузить текстуры, сижу жду. Надпись ждите и все. Надоело, снял задачу и удалил игрушку. Типичное неуважение к юзеру, запустил поток и тишина, прогресса загрузки нет, на клаву нет реакции. Так что потоки надо контролить, а это уже цикл. Вот как прыгнуть из потока? Никак, пока сам не остановится. Что делать в ситуации, когда вроде прога зависла и комп не реагирует. Сиди и думай, зависло или прогер правильный запустил поток правильно... или неправильно. Цикл спасет !
0
|
||
| 19.05.2026, 15:05 | |
|
Задание Progress bar Progress bar
progress bar Progress bar квадратиками хочу на XE5 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|