|
VCL + много потоков
|
|||
---|---|---|---|
#18+
У меня есть приложение, в котором в эмулирую работу всяких датчиках и есть табло оператора(главная форма). Для каждого датчика на табло я создаю набор компонентов (label, memo, image) и рабочий поток. В потоке идет эмуляция изменения состояния датчика и все изменения я кидаю в очередь TObjectList. Главный поток считывает TObjectList каждого потока и отображает изменения на форме. От основного потока редко поступают команды на датчики. Механизм передачи команд так же через TObjectList. Когда датчиков (потоков) становиться много, то основной поток VCL не успевает все это отображать и интерфейс начинает подтормаживать. Ткните в нужную сторону балансировки потоков ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2021, 21:08 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
cptngrb Когда датчиков (потоков) становиться много, то основной поток VCL не успевает все это отображать и интерфейс начинает подтормаживать. Ткните в нужную сторону балансировки потоков Для отображения достаточно обновлять картинку несколько раз в секунду, промежуточные изменения выкидывать: по таймеру основной поток может брать только последнюю запись о состоянии датчика, даже если в очереди их тысяча. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2021, 21:40 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
cptngrbТкните в нужную сторону балансировки потоков Выкинуть TObjectList, изменения передавать через Message. Выкинуть Repaint, ограничиться Invalidate. На большее мой хрустальный шар не тянет. Облажаться в реализации взаимодействия потоков можно слишком многими способами. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2021, 22:03 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
cptngrb, Пусть железяку купят побыстрее. Будет лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2021, 22:43 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
Мне вот даже интересно. В 97-м году, когда я пришёл работать на дельфу, у той конторы был комплекс программ для Московской Сотовой. Этот комплекс был написан непосредственно основателями-гендирами (оказавшимися неплохими бизнесменами, но не самыми пряморукими в части программирования, прямо скажем). И тот комплекс отлично отображал в форме, например, состояние коммутатора (насколько я помню - порядка пятисот базовых станций и полутора тысяч сот). Статус цветом, допинформация итп. С изменением практически в реальном времени. в 97-м году. На машинах уровня Pentium 100 с 8 Mb оперативной памяти. Не самыми прямыми руками. Отлично работало. Блин, вот сколько же должно быть этих датчиков, чтобы оно сейчас вызывало проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2021, 23:52 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
Если криво написать тормозить будет все что угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 00:36 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
Эмулятор тоже нужно писать грамотно. Ориентируясь на конкретные датчики. Мне вот только одно пока не понятно. А с реальными датчиками как организуется связь? Что это за реальные датчики, которые что-то, куда-то шлют даже если их и не просят? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 03:11 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
cptngrb, По опыту, самое узкое место в эффективном многопоточном программировании на Delphi, это излишние обращения к блокировочному менеджеру памяти. Ставишь точку прерывания на System._GetNem() и тебе многое станет ясно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 09:03 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
Vlad Fсамое узкое место в эффективном многопоточном программировании на Delphi, это излишние обращения к блокировочному менеджеру памяти. Только если ты слишком интенсивно используешь типы и классы, обращающиеся к нему типа String или TObjectList. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 12:42 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, То есть, как раз то, на чем и построен весь обмен в данном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 13:06 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
x1ca4064, согласен. учту ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 19:37 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, переделаю на postmessage. посмотрю результат ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 19:37 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
softwarer, то что криво написано как бы ясно из-за тормозом, спасибо кэп ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 19:38 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Vlad Fсамое узкое место в эффективном многопоточном программировании на Delphi, это излишние обращения к блокировочному менеджеру памяти. Только если ты слишком интенсивно используешь типы и классы, обращающиеся к нему типа String или TObjectList. да, так и есть. от String не куда не денешься. логирование работы и ошибок на экране бегает ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 19:40 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
northener, связь по http ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 19:56 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
cptngrbот String не куда не денешься. логирование работы и ошибок на экране бегает Для него достаточно ShortString. А вот TMemo, да ещё и с удалением старых строк - реально тормоз, да. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 20:07 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
cptngrb Dimitry Sibiryakov, переделаю на postmessage. посмотрю результат Почему нельзя раз в 100 мс опрашивать эту толпу потоков и отображать состояние на экране? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 23:26 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
DmSer, Это было бы слишком просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2021, 23:58 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
И неэффективно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 00:18 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Не правда. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 00:50 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
Это может быть эффективно если отображаемое состояние изменяется с частотой, превосходящей частоту кадровой развёртки. Тогда можно пропускать некоторые события, поскольку они всё равно не отрисуются нормально. Десять раз в секунду рендерить состояние, не успевшее измениться - неэффективно, лучше таки подождать сигнала о его изменении, чем греть воздух, переливая из пустого в порожнее. Ну и серая зона между этими случаями, где можно держать предварительно отрисованный фон редко меняющихся состояний и накладывать на него быстроменяющиеся объекты. Где именно лежит случай аффтара - мой ХШ не показывает. Но "http" как бы намекает, что нормальный код ещё и поспать успеет между пакетами. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 01:13 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
cptngrb northener, связь по http С датчиками? По http? Первый раз слышу. Ссылку можно попросить на конкретный датчик? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 02:54 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Ловить и обрабатывать перерисовку от N событий, от каждого датчика отдельно, по любому дольше, чем 1 раз в M мсек перерисовывать все изменившиеся датчики разом. И, как минимум, предсказуемей по производительности. Перерисовывать то что не изменилось? Зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 04:07 |
|
VCL + много потоков
|
|||
---|---|---|---|
#18+
DmSer cptngrb Dimitry Sibiryakov, переделаю на postmessage. посмотрю результат Почему нельзя раз в 100 мс опрашивать эту толпу потоков и отображать состояние на экране? Сейчас так и есть. Но то ли я спрашиваю не так эту толпу, то ли отображение на экране. Буду смотреть ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 08:27 |
|
|
start [/forum/topic.php?fid=58&msg=40100043&tid=2037000]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 265ms |
total: | 411ms |
0 / 0 |