Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
4067 / 2675 / 587
Регистрация: 11.09.2009
Сообщений: 9,543

В Caption "(не отвечает), Progress Bar не перерисовывается. Как исправить?

26.11.2025, 19:34. Показов 5003. Ответов 102
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Старое однопоточное приложение, Delphi 7, исходник есть.
В нём Progress Bar, показывающий процент выполнения вывода по USB. Процесс занимает секунд 20-40.
Примерно 50 на 50, примерно посередине времени выполнения процесса, система (Windows 7) замораживает форму, скачком чуть смещает её вправо и вниз на десяток пикселей, в её Caption система добавляет "(не отвечает)", перерисовки Progress Bar естественно нет. Причём программа прекрасно продолжает правильно работать, после завершения функции вывода по USB, форма "размораживается", и программа продолжает дальше работать.

Можно ли исправить такое "поведение" каким-нибудь простым "костылём"? Очень уж не хочется всю эту программу переписывать под потоки.

Видимо с этим уже пытались бороться, - есть Application.Process_Messages в местах смены значения Progress Bar.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2025, 19:34
Ответы с готовыми решениями:

Как сделать так что, если на 2 форме значение label.caption поменялось, то и на 1 форме у label.caption было такое же
У меня есть 2 формы. На них есть по одному label. Как сделать так что, если на второй...

Как работает Progress Bar
Все доброе время суток, не подскажете как работает Progress Bar и для чего он нужен?

Как связать FTP и progress bar?
P.S. как для скачивания(get), так и для отправки(put) файла на FTP. C помощью IDFTP.Sizе узнаю...

102
Эксперт .NET
 Аватар для Rius
13315 / 7771 / 1687
Регистрация: 25.05.2015
Сообщений: 23,668
Записей в блоге: 14
21.05.2026, 17:51
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 119zero Посмотреть сообщение
Тем более из потока в поток прыгать, это потенциальные глюки.
Какие? Потенциально криворукий погромист, который ни строчки учебников про многопоточность не прочитал?

Дельфийцы, у вас есть нормальные учебники вообще по теме? Подкиньте этому неофиту
По C# вот шикарное введение у Шилдта было:
Миниатюры
В Caption "(не отвечает), Progress Bar не перерисовывается. Как исправить?  
0
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 304
21.05.2026, 17:56
Цитата Сообщение от Rius Посмотреть сообщение
криворукий
Теоретик, за полчаса код не написал? Свали тогда с темы. Попиндеть штоле не с кем, форум большой.
Если не знаешь Делфи, что здесь делаешь? Задвигай свою теорию шарпистам

 Комментарий модератора 
Не надо указывать другим участникам, писать в тему или нет.
0
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 304
21.05.2026, 18:42
Я тут причем? Алгоритм предложил, в нем все понятно.
Окна тут не причем, про них вообще речи не было.
Бред уже начинается.
0
Эксперт .NET
 Аватар для Rius
13315 / 7771 / 1687
Регистрация: 25.05.2015
Сообщений: 23,668
Записей в блоге: 14
21.05.2026, 18:46
Цитата Сообщение от 119zero Посмотреть сообщение
Алгоритм предложил, в нем все понятно.
Да, понятно. Это частное решение, обычный новичковый костыль среди тех, кто ниасилил многопоточность. Как SerialPort.DataReceived в C# - тоже работает, но за пределами простейших демок не так, как надо.
Бред начался с циклов и таймеров в потоке UI, которые всё-всё порешали и потоки не нужны.
0
Модератор
4150 / 2360 / 813
Регистрация: 15.11.2015
Сообщений: 9,489
21.05.2026, 18:49
Цитата Сообщение от 119zero Посмотреть сообщение
С Прогрессом никак?
Всё нормально с ним. Я выше код написал, всё шевелится без подвисаний UI.

Цитата Сообщение от 119zero Посмотреть сообщение
сам порт не отвечает, потому что пытается читать и никак.
А UI при этом, не висит, а реагирует на действия пользователя.
0
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 304
21.05.2026, 18:51
Цитата Сообщение от Rius Посмотреть сообщение
новичковый костыль среди тех, кто ниасилил многопоточность
Опять не читаем и есть сомнения в компетентности вообще.
Порт железный и не отвечает, как его победить потоками ? Никак.
0
2829 / 1686 / 272
Регистрация: 19.02.2010
Сообщений: 4,456
21.05.2026, 18:53
Цитата Сообщение от Rius Посмотреть сообщение
Дельфийцы, у вас есть нормальные учебники вообще по теме?
Delphi High Performance: Master the art of concurrency, parallel programming, and memory management to build fast Delphi apps. 2 Ed - Gabrijelčič Primož (2023)
Внутрь (на примеры кода) не смотрел - не дельфист, отмечаю книгу только на основе своего взгляда на детальное оглавление:
содержание 4рёх глав

Chapter 7: Getting Started with the Parallel World....234

Technical requirements....235

Processes and threads....235

Multithreading....235

Multitasking....236

When to parallelize code....237

The most common problems....237

Never access the UI from a background thread....238

Simultaneous reading and writing....241

Sharing a variable....243

Hidden behavior....247

Synchronization....249

Critical sections....250

Other locking mechanisms....256

A short note on coding style....262

Shared data with built-in locking....263

Interlocked operations....264

Object life cycle....268

Communication....271

Windows messages....272

Synchronize and Queue....276

Polling....277

Performance....279

Third-party libraries....280

Summary....281

Chapter 8: Working with Parallel Tools....284

Technical requirements....284

TThread....285

Automatic life cycle management....288

Advanced TThread....290

Setting up a communication channel....292

Sending messages from a thread....296

Using TCommThread....298

Implementing a timer....300

Synchronizing with multiple workers....304

WaitForMultipleObjects....306

Condition variables....310

Comparing both approaches....315

Summary....315

Chapter 9: Exploring Parallel Practices....318

Technical requirements....319

Tasks and patterns....319

Variable capturing....320

Tasks....322

Exceptions in tasks....324

Parallelizing a loop....327

Thread pooling....330

Async/Await....332

Join....335

Join/Await....337

Future....342

Parallel for....344

Pipelines....349

Web spider....350

The filter stage....356

The downloader stage....358

The parser stage....359

Summary....362

Chapter 10: More Parallel Patterns....364

Technical requirements....364

Using OmniThreadLibrary....365

Blocking collections....366

Using blocking collections with TThread-based threads....368

Async/Await....371

Join....372

Future....376

Parallel Task....377

Background Worker....381

Initial query....384

Pipeline....389

Creating the pipeline....391

Stages....393

Displaying the result and shutting down....397

Map....398

Timed Task....400

Summary....404
1
Эксперт .NET
 Аватар для Rius
13315 / 7771 / 1687
Регистрация: 25.05.2015
Сообщений: 23,668
Записей в блоге: 14
21.05.2026, 18:55
Цитата Сообщение от 119zero Посмотреть сообщение
как его победить потоками ? Никак.
А что его побеждать? Нет ответа - значит нет ответа, работаем дальше. Это у криворучек проблемы на пустом месте.
0
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 304
21.05.2026, 19:00
Завязывай.
Не можешь написать код, значит не можешь. Вывод? Не флуди.
По ушам свистел, сам криворуким оказался.
0
21.05.2026, 19:03
 Комментарий модератора 
Завязываем переливание из пустого в порожнее.
0
Эксперт .NET
 Аватар для Rius
13315 / 7771 / 1687
Регистрация: 25.05.2015
Сообщений: 23,668
Записей в блоге: 14
21.05.2026, 19:10
А что тут переливать? Десятки лет с железом по uart, usb-cdc, rs-485, hart работаю, из отдельных потоков, и никаких проблем. UI не виснет, потоки не глючат, данные между ними и UI пересылаются. Я так и не понял, что тут надо побеждать.
0
4067 / 2675 / 587
Регистрация: 11.09.2009
Сообщений: 9,543
21.05.2026, 21:56  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Это у нас нет. А у вас есть исходник.
Вы удивительно умеете делать вид, что не понимаете, о чём речь.
Могу и развёрнутым текстом сказать, чтобы труднее было вывернуть: Речь естественно об исходниках кода той части ОС, в которой происходит "заморозка" окна. Речь о том, что без этого не узнать, что именно там происходит. Без этого гадать, что именно надо сделать, можно до бесконечности. Что собственно мы все тут и наблюдаем.

Добавлено
И вообще. Кто тему-то из древних пучин поднял? Кто-то на пенсию вышел, и искал что-то хоть немного знакомое, про что бы потрындеть?
0
Модератор
4150 / 2360 / 813
Регистрация: 15.11.2015
Сообщений: 9,489
22.05.2026, 01:49
Цитата Сообщение от i8085 Посмотреть сообщение
Речь естественно об исходниках кода той части ОС, в которой происходит "заморозка" окна.
Ну здрасте. Про исходники ОС не было и намёка, а выворачиваю я, значит. Известно, что некоторые функции ОС могут выполняться долго. Для учёта этого никакие исходники не нужны.
0
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 304
22.05.2026, 10:08
Никто и никогда не пишет такие простые проги заумно. Какие в ДОС были потоки? Не было их.
Если с индикацией надо, смотрим буфер СОМ порта приема, если там есть хотя бы 1 байт, значит качать 1 байт. Трафик надо считать и если накопилось более 1%, на прогресс отправить.
При передаче не превышать буфер более 64 байт, иначе переполнится.
Если буфер чтения пустой более 1 сек по таймеру, значит сигналим, что девайс не отвечает. Что тут может сломаться? В любой момент это прервать можно.
Команду наличия данных в буфере порта смотреть в библе, например TComport (CPort.pas) через свойство InputCount (возвращает количество доступных байт).
Delphi
1
2
3
4
5
if ComPort1.InputCount > 0 then
begin
  // Считываем из буфера порта
  ComPort1.Read (myArray[1], ComPort1.InputCount);
end;
Для Delphi 5, 6, 7, 2007-2010, XE скачать тут-https://github.com/CWBudde/ComPort-Library

Зачем именно потоки? Проверок там нет, тогда какой в потоках смысл, все равно туда проверки надо вставлять. Все потому, что работает теория, если нет потоков, значит это плохо и это говнокод.
Вот чего напали на автора, нужны потоки! Зачем? Хз, нужны потоки и все, переписывай код. И понеслось. Типичная бредятина на форуме, один брякнул, другой подхватил.
0
Эксперт .NET
 Аватар для Rius
13315 / 7771 / 1687
Регистрация: 25.05.2015
Сообщений: 23,668
Записей в блоге: 14
22.05.2026, 10:15
А этот Com порт с приёмом , он с нами в одной комнате?
0
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 304
22.05.2026, 10:22
Цитата Сообщение от Rius Посмотреть сообщение
Com порт
Можешь набрать дамп вручную на клаве.
Или почитай, что такое Делфи, это язык программирования.
0
Эксперт .NET
 Аватар для Rius
13315 / 7771 / 1687
Регистрация: 25.05.2015
Сообщений: 23,668
Записей в блоге: 14
22.05.2026, 10:29
Вау, какое откровение! Прям сорвал покровы!
0
9 / 11 / 1
Регистрация: 02.07.2021
Сообщений: 304
22.05.2026, 12:26
Емае. Значит ты не в курсе, как к порту подключаться? Как все запущено. Ну хоть сейчас узнал.
Вот как так-то? Чел не знает как писать код на Делфи, сидит в теме Делфи и нарезает понты, что вокруг все говнокодеры?

Цитата Сообщение от AzAtom Посмотреть сообщение
UI при этом, не висит, а реагирует на действия пользователя
Через PostMessage сделано, костыль конечно. Если в Д7 сработает, переделка у автора минимальная будет. Как вариант, пойдет. Можно прямо сейчас исправить исходники.
0
22.05.2026, 20:59
 Комментарий модератора 
Уважаемые господа. Предлагаю прекратить переходить на личности. Мы не обсуждаем личность программиста и ровность его рук. Мы обсуждаем его код. Надеюсь я понятно выразился. Если кому-то окажется непонятно после 3-й просьбы модератора в теме - я объясню подробнее, на картах.
0
2 / 2 / 0
Регистрация: 28.11.2025
Сообщений: 29
Вчера, 15:37
Чувствую себы виновным за то, что разбудил тему.
как я понимаю, вопрос не по программированию, а философский. Когда люди не имеют единого языка, то им невозможно договориться. Все таки попробую прояснить для не совсем понимающих: ProcessMessages прокручивает очередь всех оконных сообщений, включая клики, движения мыши и тп. В отдельной нити свой цикл - это отдельный процесс. Следует подумать, насколько неэффективно обрабатывать их (тем более многократно в таймере) для прогрессбара, если можно приостановить в нужный момент нить обработки, нарисовать что нужно и продолжить. Взаимодействием займётся ядро системы, там тоже возможны коллизии, но их несравнимо меньше, чем в пользовательском коде (особенно не всегда опытных кодеров).

Но, если это не приложение для собственного нечастого пользования, то можно и не использовать ненавистные нити, а просто ждать, сложив руки на животе. Или крутить цикл с ProcessMessages. ИМХО.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
Вчера, 15:37
Помогаю со студенческими работами здесь

Задание Progress bar
Имеется прграмма (её исполнительный фрагмент, больше в ней ничего нет), которая открывает текстовый...

Progress bar
как сделать так, чтобы при нажатии кнопки(загружающая в memo текст) она начинала работать, а когда...

«Progress Bar» в виде постепенно закрашиваемого посекторно круга
Помогите пожалуйста, «Progress Bar» в виде постепенно закрашиваемого посекторно круга. Выложите...

progress bar
Вообщем суть в этом у меня есть 3 формы в первой форме заполняются эдит1 потом открывается идет...

Progress bar квадратиками хочу на XE5
Вот. Все работает, но сплошной полосой, а мне нравятся олдскульные квадратики - где взять?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru