487 / 333 / 33
Регистрация: 15.08.2011
Сообщений: 1,074
|
|
1 | |
Ошибка при рисовании на канве10.01.2018, 20:51. Показов 821. Ответов 3
Метки нет (Все метки)
Сразу скажу, с графикой раньше вообще не работал.
В моей программе используется несколько потоков(нитей). Один поток принимает данные в реальном времени, другой их обрабатывает, третий по результатам обработки рисует графику. Рисование, естественно, идет непрерывно. Все рисуется хорошо, но если потащить мышкой работающее окно, вылетает ошибка "Canvas does not allow draving". Происходит это на операции Canvas.CopyRect. Понимаю что возникает от того что разные потоки пытаются рисовать на одну канву. Какие способы устранения посоветуют мне опытные программеры?
0
|
10.01.2018, 20:51 | |
Ответы с готовыми решениями:
3
Авто увеличение ClientWidth при рисовании на канве При рисовании фигур на Канве рисуется только последняя ошибка при рисовании!!! Размытие при рисовании на Канве |
487 / 333 / 33
Регистрация: 15.08.2011
Сообщений: 1,074
|
|
10.01.2018, 21:50 [ТС] | 3 |
А синхронизация не замедлит мне потоки? А то идет быстрый поток данных, нельзя чтоб были потери.
А как вы смотрите на вариант с методами lock/unlock в объекте canvas?
0
|
10.01.2018, 23:35 | 4 |
lock/unlock в canvas нужен, когда вы рисуете в канвас у например TBitmap в доп потоке
экранные компоненты можно трогать ТОЛЬКО в главном поэтому как бы вы не старались, без синхронизации программа помрет вы одним потоком пишете данные, а вторым читаете читающий поток прочел 100 байт, в это время пишущий переразместил массив в другое место и при чтении 101 байта первый поток попадет в уже освобожденную память и получит AV придумывайте алгоритмы с несколькими буферами, чтобы читающий и пишущий потоки не могли бы работать с одним буфером в принципе. все эти ухищрения и называются синхронизацией. ваши потоки не должны конфликтовать либо они ходят одновременно в разных местах, либо в одном месте, но друг за другом. если они оба читают, то тоже ничего страшного. поэтому нет золотой пули и под каждую задачу схему синхронизации выдумывают, опираясь на детали
2
|
10.01.2018, 23:35 | |
10.01.2018, 23:35 | |
Помогаю со студенческими работами здесь
4
Рисование на виртуальной канве или как избежать мигания при рисовании Двойное рисовании линии на канве Ошибка при рисовании сферы C++ MFC-приложение, ошибка при рисовании. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |