|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.07.2018, 23:38 | #1 |
Пользователь
Регистрация: 11.12.2012
Сообщений: 20
|
Ускорение вывода в Memo и какие могут быть альтернативы?
Всем доброго времени суток.
Есть поблема. Вкратце. Есть два потока. Один собирает данные в динамический буфер. Второй отрисовывает данные в Memo. Все синхронизировано. Проблема в том, что данные собираемые потоком 1, приходят существенно быстрее чем второй поток их отрисовывает в Memo через Lines.Add Замена шрифта в Memo на терминал, существенно улучшает положение, но все равно не айс. Так же варианты с BeginUpdate\Endupdate не улучшают ситуацию. Собственно вопроса... Как ускорить вывод в Memo? Какую технику лучше применить для вывода текстового лога(который постоянно сыпется) на vcl форму? Подскажите советом. Спасибо. |
21.07.2018, 01:39 | #2 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
А для чего собственно данные выводятся в визуальный компонент? Вы понимаете что визуальные компоненты существуют для того, чтобы пользователь увидел эти данные и понял их? А если поток не успевает отображать эти данные в визуальном компоненте, то что тогда говорить о пользователе, который гораздо более медленный?
|
21.07.2018, 19:00 | #3 |
Пользователь
Регистрация: 11.12.2012
Сообщений: 20
|
Сниффер-анализтор данных, приходящих с устройства.
Их много. В итоге имеем ситуацию, когда после 10-15 сек работы, отключаем оборудование , а данные продолжают еще отображаться, потому что поток сбора данных естесственно убежал далеко вперед. Поэтому и рождается вопрос, есть ли какие либо технологии для быстрого вывода данных. Представьте себе тот же самый UART. Там можно данные организовать очень быстро... Многие программы не имеют каких либо задержек в отображении данных после физического отключения от оборудования, предоставляющего данные.... Тут речь об этом же.... |
22.07.2018, 01:38 | #4 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
Вы не поняли ни мой вопрос, ни подсказку, которая в нем содержится. Визуальный компонент нужен, когда нужно анализировать данные глазами пользователя! Если анализ глазами не нужен, то Memo надо выкинуть и заменить чем-нибудь невизуальным. Хоть двоичным массивом, хоть типом string, хоть типом TStringList. А ускорить вывод в Мемо вам не удастся никак.
Ну а по поводу "данные продолжают еще отображаться, потому что поток сбора данных естесственно убежал далеко вперед." это неправильный алгоритм/код этих потоков. В чём неправильность угадать не видя кода не возможно. |
27.11.2018, 01:53 | #5 |
Пользователь
Регистрация: 11.12.2012
Сообщений: 20
|
Всем доброго времени суток.
Сам вопрос задал, в итоге сам его и решил. Все решается достаточно просто. Поток сбора данных с переферии собирает полученные данные в TSringlist Отображение выводится на TListBox с параметром Style:=lbVirtual; Запускается обычный TTimer с периодом хоть 1мс который обновляет данные TListBox'у Не забываем обработку данных(чтение в обработчике, запись из потока сбора данных) TStinglist защитить например через критические секции. Вуаля. Все прекрасно работает. Ничего не теряется.Совсем. Все отображается с огромной скоростью. Так же установлен лимит для ListBox на 1000 строк на всякий случай. Спасибо за наводку, что отображать можно часть данных, а потом все можно сохранить. Ведь у нас есть все данные в TSringlist =) Ура. |
29.11.2018, 02:12 | #6 | |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
Цитата:
Нафига пользователю нужно такое "отображение"? Он же не сможет нормально прочитать никакую строчку из этого потока строчек! Так что мой комментарий к данному варианту решения частично озвученной задачи таков. Если это учебная задача в кулинарном техникуме, то препод должен поставить пятёрку/отлично и выставить вам бутыль. Если это учебная задача в профильном учебном заведении - вы заслуживаете максимум тройки. |
|
29.11.2018, 02:21 | #7 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
Вдогонку. Если это не учебная задача, а реальный проект, за который вам платят, то так и скажите.
|
30.11.2018, 10:55 | #8 |
Форумчанин
Регистрация: 17.03.2009
Сообщений: 977
|
А чем не устроило собирать данные в не визуальный компонент? а потом всё сразу вставлять? собираем всё в List1. а когда надо обновляем ListBox1.
Код:
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
Последний раз редактировалось IliaIT; 30.11.2018 в 10:58. |
09.12.2018, 08:06 | #9 |
Я самый любопытный
Участник клуба
Регистрация: 24.07.2012
Сообщений: 1,950
|
Код:
|
13.12.2018, 15:00 | #10 |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
1. создание объекта типа
Код:
2. получение данных Код:
Код:
95% сбоев и ошибок приложений, находится в полу метрах от монитора
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Какие могут быть последствия от копии сайта? | Biffy | Помощь студентам | 2 | 03.03.2012 00:49 |
какие могут быть атрибуты? | tema654 | Microsoft Office Access | 0 | 05.01.2012 14:02 |
GetDIBits, нехватка памяти, какие могут быть причины? | Пепел Феникса | Win Api | 4 | 11.12.2011 01:21 |
Какие варианты по адаптации кода могут быть? | VaLenOK007 | Помощь студентам | 2 | 20.06.2011 11:47 |
Какие проблемы могут быть с цифровой удостоверением? | ann200 | Microsoft Office Access | 2 | 07.10.2009 17:52 |