Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [вопрос] Builder, COM порты, графика и потоки 
:(
    Опции темы
gather
Дата 6.5.2008, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Rescue Officer
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 13.6.2007
Где: Russia, Lipetsk

Репутация: нет
Всего: 4



Возник следующий вопрос.
1) Имеется картинка в формате BMP 8bpp (размеры 8200x8300/70МБ)
2) Имеется COM порт, с которого надо читать поток данных, который туда передает приемник.
3) Имеется основная программа, которая должна выполнять п. 1 и 2 и отрисовывать заданный участок исходного BMP на канве.

Все бы хорошо, но хотелось бы уточнить некоторые детали.

1) Как лучше организовать работу с COM портом и передачу полученных данных в обработчик?
2) Как лучше организовать вывод области BMP на канву?
Если необходимо использовать потоки, то каким образом лучше разделить их? Свой поток для COM порта и отрисовки карты, либо раздельные?

Заранее спасибо за помощь.


PM MAIL WWW Skype GTalk Jabber   Вверх
ama_kid
Дата 6.5.2008, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95



Цитата(gather @  6.5.2008,  07:55 Найти цитируемый пост)
Как лучше организовать работу с COM портом и передачу полученных данных в обработчик?
Как угодно, но в любом случае на эту работу должно быть выделено не менее одного потока (как правило - одного достаточно). Поток крутится, постоянно считывает данные с порта и сообщениями (либо другим безопасным способом) передает принятые данные в основной поток (на форму).
Цитата(gather @  6.5.2008,  07:55 Найти цитируемый пост)
Как лучше организовать вывод области BMP на канву?
Имхо, конечно, но мне почему-то кажется, что лучше такой большой рисунок разбить на кучу мелких, ибо одномоментно выводить 700мб картинки будет затруднительно и нерационально. А по мере необходимости - подгружать требуемый участок. Отдельный поток на это дело вроде как не требуется (хотя можно и обдумать в плане буферизации рисунков).



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
gather
Дата 6.5.2008, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Rescue Officer
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 13.6.2007
Где: Russia, Lipetsk

Репутация: нет
Всего: 4



ama_kid, 
Цитата(ama_kid @  6.5.2008,  08:10 Найти цитируемый пост)
ибо одномоментно выводить 700мб 
 ноликом ошиблись smile там 70 метров.


Цитата(ama_kid @  6.5.2008,  08:10 Найти цитируемый пост)
и сообщениями (либо другим безопасным способом) передает принятые данные в основной поток (на форму).

а можно пример, как это реализовать?  smile 
PM MAIL WWW Skype GTalk Jabber   Вверх
ama_kid
Дата 6.5.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95



Цитата(gather @  6.5.2008,  08:34 Найти цитируемый пост)
ноликом ошиблись  smile там 70 метров.
Ну, 70 метров тоже не сильно увеличат производительность... smile 
Цитата(gather @  6.5.2008,  08:34 Найти цитируемый пост)
а можно пример
Не понял, какой пример? Заводишь у себя на форме собственное сообщение WM_USER+xxx и функцией SendMessage передаешь данные через это сообщение. Либо, если данных много - используешь сообщение WM_COPYDATA. Либо, если не хочешь юзать сообщения - через Synchronize\критические секции напрямую копируешь данные в основной поток. Вариантов много...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
gather
Дата 6.5.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Rescue Officer
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 13.6.2007
Где: Russia, Lipetsk

Репутация: нет
Всего: 4



Цитата(ama_kid @  6.5.2008,  08:56 Найти цитируемый пост)
Не понял, какой пример?

В принципе, то что Вы сказали и требовалось smile Спасибо за помощь.

Цитата(ama_kid @  6.5.2008,  08:56 Найти цитируемый пост)
Ну, 70 метров тоже не сильно увеличат производительность... smile 

Она один раз подгружается, потом из нее требуемые части 300*300 пикселей отображаются smile
PM MAIL WWW Skype GTalk Jabber   Вверх
fish9370
Дата 6.5.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



писал абсолютно похожую программу..
выглядела она примерно так: поток для приема данных, поток для отрисовки состояния, и поток основной программы (интерфейс пользователя)
проблемы с которыми столкнулся: рассинхронизация потоков (абсолютно необъяснимые крэши, в случайный момент времени от 15 минут до 8 часов), здесь мне кажется действительно удобным взаимодействие с помощью системных сообщений..
отображение производил в потоке с частотой 100мс через двойной буфер с помощью системной API-функции BitBlt() никаких задержек или проблем с этим не наблюдал..

ps в windows для работы с ком-поротом (и не только) предусмотренна API-функция CreateFile(), результатом которой является handle устройства, дальше используются функции для работы с файлами, куда этот handle должен быть передан..


--------------------
undefined
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.