Помогите спроектировать приложение
Меня интересует как правильнее всего организовать потоки, как их синхронизировать, и наконец, как/чем всё это дело лучше рисовать? Дело в том, что рисовать надо 25 кадров/сек и почти на полный экран, при этом нельзя тормозить поток чтения данных и нужно еще реагировать на действия юзеров. То что сделал я, в принципе работает, но как-то нестабильно (потоки ругаются) и в добавок изображение мерцает (видимо не успевает перерисовывать :(
Помогите советом А еще подкиньте плиз ссылку, где можно почитать про многопотоочные приложения. Желательно доходчиво и на русском ;)
Это классическая задача Поставщика-Получателя, где поставщиком является поток, читающий данные из COM-порта, а получателем - поток, строящий изображение.
Меня интересует как правильнее всего организовать потоки, как их синхронизировать, и наконец, как/чем всё это дело лучше рисовать?
Синхронизация, как следует из задачи, очень простая: есть два семафора и буфер данных, полученных из COM-порта, полагаю, как организовать потокобезопасное чтение-запись данных в буфер ясно.
Дело в том, что рисовать надо 25 кадров/сек и почти на полный экран, при этом нельзя тормозить поток чтения данных и нужно еще реагировать на действия юзеров.
Вариант раз: Если использовать стандартную .NET графику, а это GDI+, то как таковая отрисовка в любом случае идёт в отдельном системном потоке, и заморачиваться синхронизацией с ним не стоит - это прозрачно.
Можно создавать Bitmap в памяти и рисовать в нём, по завершении построения кадра тупо бросать битмап на форму.
Вариант два: OpenGL для .NET - тут уж точно тормозов не будет с отрисовкой ;)
Вариант три: DirectX. Подключаем сборочки Microsoft.DirectX и....
Помогите советом А еще подкиньте плиз ссылку, где можно почитать про многопотоочные приложения. Желательно доходчиво и на русском ;)
Думаю, на openGL и DirectX стоит смотреть только в случае, если не справляется GDI+.
З.Ы. от мерцания можо избавиться поставив свойство DoubleBuffed у формы в Тру.
Вариант два: OpenGL для .NET - тут уж точно тормозов не будет с отрисовкой ;)
Вариант три: DirectX. Подключаем сборочки Microsoft.DirectX и....
Думаю, на openGL и DirectX стоит смотреть только в случае, если не справляется GDI+.
Твоя ссылка битая. http://www.taoframework.com/Home - вот для OpenGL (в том числе) предложить могу.
Когда размещал - работала.
За ТАО - спасибо. Почитаю.
А есть ссылочка где можно посмотреть примеры решения этой задачи?
Меня интересуют именно примеры правильно построеннойструктуры потоков их синхронизация и т.п.
Вариант раз: Если использовать стандартную .NET графику, а это GDI+, то как таковая отрисовка в любом случае идёт в отдельном системном потоке, и заморачиваться синхронизацией с ним не стоит - это прозрачно.
Я рисую по таймеру и GDI не справляется за отведенный интервал.
Можно создавать Bitmap в памяти и рисовать в нём, по завершении построения кадра тупо бросать битмап на форму.
Пробовал CachedBitmap делать и кидать на форму - не успевает :(
Спасибо за ссылочку - сходил, разбираюсь.
Вариант три: DirectX. Подключаем сборочки Microsoft.DirectX и....
Думаю, на openGL и DirectX стоит смотреть только в случае, если не справляется GDI+.
З.Ы. от мерцания можо избавиться поставив свойство DoubleBuffed у формы в Тру.
Первым же делом поставил - моргает зараза :(