Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите спроектировать приложение

26K
01 марта 2007 года
TuMoXa
2 / / 01.03.2007
Нужно сделать приложение на C#, которое в реальном времени читает данные из COM-порта и динамически отрисовывает на основании этих данных кривульки на форме.
Меня интересует как правильнее всего организовать потоки, как их синхронизировать, и наконец, как/чем всё это дело лучше рисовать? Дело в том, что рисовать надо 25 кадров/сек и почти на полный экран, при этом нельзя тормозить поток чтения данных и нужно еще реагировать на действия юзеров. То что сделал я, в принципе работает, но как-то нестабильно (потоки ругаются) и в добавок изображение мерцает (видимо не успевает перерисовывать :(
Помогите советом А еще подкиньте плиз ссылку, где можно почитать про многопотоочные приложения. Желательно доходчиво и на русском ;)
5
09 марта 2007 года
hardcase
4.5K / / 09.08.2005
Цитата: TuMoXa
Нужно сделать приложение на C#, которое в реальном времени читает данные из COM-порта и динамически отрисовывает на основании этих данных кривульки на форме.


Это классическая задача Поставщика-Получателя, где поставщиком является поток, читающий данные из COM-порта, а получателем - поток, строящий изображение.

Цитата: TuMoXa

Меня интересует как правильнее всего организовать потоки, как их синхронизировать, и наконец, как/чем всё это дело лучше рисовать?

Синхронизация, как следует из задачи, очень простая: есть два семафора и буфер данных, полученных из COM-порта, полагаю, как организовать потокобезопасное чтение-запись данных в буфер ясно.

Цитата: TuMoXa

Дело в том, что рисовать надо 25 кадров/сек и почти на полный экран, при этом нельзя тормозить поток чтения данных и нужно еще реагировать на действия юзеров.

Вариант раз: Если использовать стандартную .NET графику, а это GDI+, то как таковая отрисовка в любом случае идёт в отдельном системном потоке, и заморачиваться синхронизацией с ним не стоит - это прозрачно.
Можно создавать Bitmap в памяти и рисовать в нём, по завершении построения кадра тупо бросать битмап на форму.
Вариант два: OpenGL для .NET - тут уж точно тормозов не будет с отрисовкой ;)
Вариант три: DirectX. Подключаем сборочки Microsoft.DirectX и....

Цитата: TuMoXa
То что сделал я, в принципе работает, но как-то нестабильно (потоки ругаются) и в добавок изображение мерцает (видимо не успевает перерисовывать :(
Помогите советом А еще подкиньте плиз ссылку, где можно почитать про многопотоочные приложения. Желательно доходчиво и на русском ;)

Думаю, на openGL и DirectX стоит смотреть только в случае, если не справляется GDI+.

З.Ы. от мерцания можо избавиться поставив свойство DoubleBuffed у формы в Тру.

63
20 марта 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: hardcase

Вариант два: OpenGL для .NET - тут уж точно тормозов не будет с отрисовкой ;)
Вариант три: DirectX. Подключаем сборочки Microsoft.DirectX и....
Думаю, на openGL и DirectX стоит смотреть только в случае, если не справляется GDI+.


Твоя ссылка битая. http://www.taoframework.com/Home - вот для OpenGL (в том числе) предложить могу.

5
20 марта 2007 года
hardcase
4.5K / / 09.08.2005
Цитата: Zorkus
Твоя ссылка битая.


Когда размещал - работала.

За ТАО - спасибо. Почитаю.

26K
27 марта 2007 года
TuMoXa
2 / / 01.03.2007
Большое спасибо за ответы, я уж и не ожидал - даже на форум давно не заходил

Цитата: hardcase
Это классическая задача Поставщика-Получателя, где поставщиком является поток, читающий данные из COM-порта, а получателем - поток, строящий изображение.



А есть ссылочка где можно посмотреть примеры решения этой задачи?
Меня интересуют именно примеры правильно построеннойструктуры потоков их синхронизация и т.п.

Цитата: hardcase

Вариант раз: Если использовать стандартную .NET графику, а это GDI+, то как таковая отрисовка в любом случае идёт в отдельном системном потоке, и заморачиваться синхронизацией с ним не стоит - это прозрачно.


Я рисую по таймеру и GDI не справляется за отведенный интервал.

Цитата: hardcase

Можно создавать Bitmap в памяти и рисовать в нём, по завершении построения кадра тупо бросать битмап на форму.


Пробовал CachedBitmap делать и кидать на форму - не успевает :(

Цитата: hardcase

Вариант два: OpenGL для .NET - тут уж точно тормозов не будет с отрисовкой ;)


Спасибо за ссылочку - сходил, разбираюсь.

Цитата: hardcase

Вариант три: DirectX. Подключаем сборочки Microsoft.DirectX и....
Думаю, на openGL и DirectX стоит смотреть только в случае, если не справляется GDI+.

З.Ы. от мерцания можо избавиться поставив свойство DoubleBuffed у формы в Тру.



Первым же делом поставил - моргает зараза :(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог