| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > [вопрос] Builder, COM порты, графика и потоки |
| Автор: gather 6.5.2008, 07:55 |
| Возник следующий вопрос. 1) Имеется картинка в формате BMP 8bpp (размеры 8200x8300/70МБ) 2) Имеется COM порт, с которого надо читать поток данных, который туда передает приемник. 3) Имеется основная программа, которая должна выполнять п. 1 и 2 и отрисовывать заданный участок исходного BMP на канве. Все бы хорошо, но хотелось бы уточнить некоторые детали. 1) Как лучше организовать работу с COM портом и передачу полученных данных в обработчик? 2) Как лучше организовать вывод области BMP на канву? Если необходимо использовать потоки, то каким образом лучше разделить их? Свой поток для COM порта и отрисовки карты, либо раздельные? Заранее спасибо за помощь. |
| Автор: gather 6.5.2008, 08:34 | ||
| ama_kid, ноликом ошиблись
а можно пример, как это реализовать? |
| Автор: ama_kid 6.5.2008, 08:56 |
| Ну, 70 метров тоже не сильно увеличат производительность... Не понял, какой пример? Заводишь у себя на форме собственное сообщение WM_USER+xxx и функцией SendMessage передаешь данные через это сообщение. Либо, если данных много - используешь сообщение WM_COPYDATA. Либо, если не хочешь юзать сообщения - через Synchronize\критические секции напрямую копируешь данные в основной поток. Вариантов много... |
| Автор: gather 6.5.2008, 09:02 |
В принципе, то что Вы сказали и требовалось Она один раз подгружается, потом из нее требуемые части 300*300 пикселей отображаются |
| Автор: fish9370 6.5.2008, 12:44 |
| писал абсолютно похожую программу.. выглядела она примерно так: поток для приема данных, поток для отрисовки состояния, и поток основной программы (интерфейс пользователя) проблемы с которыми столкнулся: рассинхронизация потоков (абсолютно необъяснимые крэши, в случайный момент времени от 15 минут до 8 часов), здесь мне кажется действительно удобным взаимодействие с помощью системных сообщений.. отображение производил в потоке с частотой 100мс через двойной буфер с помощью системной API-функции BitBlt() никаких задержек или проблем с этим не наблюдал.. ps в windows для работы с ком-поротом (и не только) предусмотренна API-функция CreateFile(), результатом которой является handle устройства, дальше используются функции для работы с файлами, куда этот handle должен быть передан.. |