Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2016, 14:43   #11
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
В данном случае, скорее всего, тормоза прорисовки были бы у программы в целом, а так они имеются только в DBGrid и сильно ощущаются при использовании таблицы пользователем.
Кода пользователь пользуется гирдом, который привязан как я понял к ClientDataSet,который в свою очередь надеюсь не корректируется потоками, может имеет смысл или отключать потоки на время пользования или отключать прорисовку пока потоки не отработают?
Думаю вы НЕ корректируете ClientDataSet внутри потока , а по таймеру записаваете в ClientDataSet результат работы потоков.
Пишу много и развернуто

Последний раз редактировалось Heneken87; 29.12.2016 в 14:46.
Heneken87 вне форума Ответить с цитированием
Старый 29.12.2016, 14:56   #12
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

В то время как ONDraw грида начинает прорисовку вы ему в нагрузочку еще и данные из его датасета меняете потоками. Верно?
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 29.12.2016, 15:19   #13
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
В то время как ONDraw грида начинает прорисовку вы ему в нагрузочку еще и данные из его датасета меняете потоками. Верно?
Цвет ячеек меняется на основе данных в этой ячейке. К примеру, поток отдал новые данные в ячейку и если эти данные соответствуют определенному цвету, то он меняется в ячейке.

Для Draw я написал инструкцию по смене цвета в ячейках, ее я опубликовал чуть выше. Далее я просто меняю текст в ячейках потоками (используя синхронизацию) и соответствующий цвет сам применяется.

Происходит ли прорисовка одновременно с обновлением данных с помощью потоков - мне не известно, а разве это возможно, учитывая описанную мной смеху работы?!
bilibian вне форума Ответить с цитированием
Старый 29.12.2016, 15:38   #14
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
Происходит ли прорисовка одновременно с обновлением данных с помощью потоков - мне не известно, а разве это возможно, учитывая описанную мной смеху работы?!
Это так и происходит,от того и тормозит и не только из за прорисовки. Вы переписываете данные в памяти потоками и при этом заставляете эти данные читать в режиме здесь и сейчас и при этом сразу все не разбирая, переписано это или еще переписывается.
В потоках заполняйте датасет как вам угодно, но не привязывайте его к гриду.
На основной форме сделайте таймер и делайте "слепок" вашего датасета , который уже и привяжите к гриду. В функции OnDraw пишите обработчик отключения таймера создания "слепка" на время пока события ONDraw работает. Как только OnDraw отработал,включаем таймер.

При таком подходе лаги пройдут и все будет работать как и работало. Пока польхзователья крутит грид,что то смотрит, таймер будет отключен,прорисовка будет идти по последнему слепку.Как только действие польхователя окончено,включаться таймер,данные обновятся.
Пишу много и развернуто

Последний раз редактировалось Heneken87; 29.12.2016 в 15:46.
Heneken87 вне форума Ответить с цитированием
Старый 29.12.2016, 15:38   #15
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
ClientDataSet который в свою очередь надеюсь не корректируется потоками
Корректируется его клон, чтобы не отнимать управление таблицей у пользователя с помощью потоков.

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Думаю вы НЕ корректируете ClientDataSet внутри потока
Как раз это и происходит. При использовании синхронизации, разумеется!

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
по таймеру
По таймеру у меня запускаются только сами потоки.
bilibian вне форума Ответить с цитированием
Старый 29.12.2016, 15:45   #16
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Это так и происходит,от того и тормозит и не только из за прорисовки.
В потоках заполняйте датасет как вам угодно, но не привязывайте его к гриду.
На основной форме сделайте таймер и делайте "слепок" вашего датасета , который уже и привяжите к гриду. В функции OnDraw пишите обработчик отключения таймера создания "слепка" на время пока события ONDraw работает. Как только OnDraw отработал,включаем таймер.

При таком подходе лаги пройдут и все будет работать как и работало.
Я не могу так поступить, так как задача таблицы, в моем случае, заключается не только получать от потоков информацию и красить ячейки. С помощью таблицы осуществляется, фактически, управление всей программой и если поступить так как вы предложили, то пользователь просто не сможет использовать программу по назначению и будет только любоваться обновляющейся статистикой и красивыми разноцветными ячейками.
bilibian вне форума Ответить с цитированием
Старый 29.12.2016, 15:50   #17
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Или отключайте потоки пока работает OnDraw
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 29.12.2016, 15:51   #18
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
Я не могу так поступить, так как задача таблицы, в моем случае, заключается не только получать от потоков информацию и красить ячейки. С помощью таблицы осуществляется, фактически, управление всей программой и если поступить так как вы предложили, то пользователь просто не сможет использовать программу по назначению и будет только любоваться обновляющейся статистикой и красивыми разноцветными ячейками.
С чего бы? Мы ничего не урезали мы на время работы OnDraw пользуемся последними данными работы потока
Пишу много и развернуто

Последний раз редактировалось Heneken87; 29.12.2016 в 16:51.
Heneken87 вне форума Ответить с цитированием
Старый 29.12.2016, 16:47   #19
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
то пользователь просто не сможет использовать программу по назначению и будет только любоваться обновляющейся статистикой и красивыми разноцветными ячейками
Grid в 1 очередь это отображение иформации. Совмещать отображение и редакцию в 1 месте еще и через многопоточность как то даже страшно становиться. Что вам мешает в 1 гриде отображать во вотром организовать управление?
p/s:Прорисовка занимает больше времени чем выполнение расчетов в памяти. Пока у вас на основной форме работает драв используя выделенную память под Dataset , ваши потоки безсовестно переписывают память заставляя ваш OnDraw рисовать безконца
Пишу много и развернуто

Последний раз редактировалось Heneken87; 29.12.2016 в 17:06.
Heneken87 вне форума Ответить с цитированием
Старый 29.12.2016, 17:00   #20
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Совмещать отображение и редакцию в 1 месте еще и через многопоточность как то даже страшно становиться.
Дело в том, что информация обновляется потоками через клон основного датасета. Именно это и не дает конфликту быть. Пользователь управляет основным, а программа использует клон. В свою очередь оба дата сета имеют общий буфер данных.

Кстати, я пробовал делать обновление ячеек потоками по кнопке. То есть вызов потоков проходил вручную. Чтобы проверить теорию об одновременном использовании таблицы пользователем и обновлением информации.

Изначально я вообще не обновлял информацию и все работало быстро. После того, как я пару раз за сутки обновил инфу по кнопке в таблице, начал замечать проблемы.
bilibian вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
неизвестные лаги Groztik Windows 11 06.11.2014 23:12
Жуткие лаги ForZe24 Windows 12 18.11.2013 15:51
Сильные лаги компа stepsav Свободное общение 17 31.05.2011 01:13
Лаги с кирилицей AIR_3 Общие вопросы C/C++ 1 05.05.2011 19:57
ЛАГИ Andrey174rus Операционные системы общие вопросы 2 16.10.2009 12:33