Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
487 / 333 / 33
Регистрация: 15.08.2011
Сообщений: 1,074
1

Ошибка при рисовании на канве

10.01.2018, 20:51. Показов 821. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сразу скажу, с графикой раньше вообще не работал.
В моей программе используется несколько потоков(нитей). Один поток принимает данные в реальном времени, другой их обрабатывает, третий по результатам обработки рисует графику. Рисование, естественно, идет непрерывно.
Все рисуется хорошо, но если потащить мышкой работающее окно, вылетает ошибка "Canvas does not allow draving". Происходит это на операции Canvas.CopyRect. Понимаю что возникает от того что разные потоки пытаются рисовать на одну канву.
Какие способы устранения посоветуют мне опытные программеры?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2018, 20:51
Ответы с готовыми решениями:

Авто увеличение ClientWidth при рисовании на канве
Всем доброго времени суток. Как рисовать на канве чтобы размеры ClientHeight и ClientWidth ( у...

При рисовании фигур на Канве рисуется только последняя
"рисую" в дельфи первый раз в наличии готовый класс TPoly (внутри методы рисование\вращение\массив...

ошибка при рисовании!!!
два участка кода которые рисуют график функции среднего температурного лагорифмического потока ...

Размытие при рисовании на Канве
Привет! Скажите, а что нужно использовать, чтобы добавить возможностей к рисованию на Канве....

3
5859 / 4588 / 1447
Регистрация: 14.04.2014
Сообщений: 20,350
Записей в блоге: 20
10.01.2018, 21:20 2
способ всегда один - синхронизация
так как никаких подробностей нет, то и ответ вообще
1
487 / 333 / 33
Регистрация: 15.08.2011
Сообщений: 1,074
10.01.2018, 21:50  [ТС] 3
Цитата Сообщение от krapotkin Посмотреть сообщение
способ всегда один - синхронизация
А синхронизация не замедлит мне потоки? А то идет быстрый поток данных, нельзя чтоб были потери.
А как вы смотрите на вариант с методами lock/unlock в объекте canvas?
0
5859 / 4588 / 1447
Регистрация: 14.04.2014
Сообщений: 20,350
Записей в блоге: 20
10.01.2018, 23:35 4
lock/unlock в canvas нужен, когда вы рисуете в канвас у например TBitmap в доп потоке
экранные компоненты можно трогать ТОЛЬКО в главном
поэтому как бы вы не старались, без синхронизации программа помрет
вы одним потоком пишете данные, а вторым читаете
читающий поток прочел 100 байт, в это время пишущий переразместил массив в другое место
и при чтении 101 байта первый поток попадет в уже освобожденную память и получит AV

придумывайте алгоритмы с несколькими буферами, чтобы читающий и пишущий потоки не могли бы работать с одним буфером в принципе. все эти ухищрения и называются синхронизацией. ваши потоки не должны конфликтовать
либо они ходят одновременно в разных местах, либо в одном месте, но друг за другом.
если они оба читают, то тоже ничего страшного.
поэтому нет золотой пули и под каждую задачу схему синхронизации выдумывают, опираясь на детали
2
10.01.2018, 23:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2018, 23:35
Помогаю со студенческими работами здесь

Рисование на виртуальной канве или как избежать мигания при рисовании
Суть проблемы в следующем: На канве рисуется очень большой и сложный чертеж, потому все...

Двойное рисовании линии на канве
По всем законам (в ДОСовской BGI графике это работало) двойное проведение линии на канве в моде...

Ошибка при рисовании сферы
Помогите, пожалуйста! Только начинаю разбирать с OpenGL и решила разобрать пример программы...

C++ MFC-приложение, ошибка при рисовании.
Учусь программировать, изучаю MFC. Решил написать простенькое приложение. Суть в том, чтобы на...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru