![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как организовать одновременное чтение из COM-порта
kami © (2008-06-04 23:38:00)Вечер добрый.
Столкнулся с такой задачей:
имеется устройство, подключенное к COM-порту и программа, получающая из него данные. Необходимо дать возможность получения этих данных как другими модулями самой программы (с чем проблем, в принципе, нет), так и другими процессами (созданы на Delphi, мной), причем их количество заранее неизвестно. Нужно только чтение, запись не предусмотрена де-юре и де-факто.
На данном этапе имею возможность организовать "распараллеливание" чтения данных при помощи установки виртуальных COM-портов, по паре на каждого "читателя". Но...это на мой взгляд неправильно.
В идеале хотелось бы видеть такую картину : 1 модуль работает непосредственно с портом, а остальные модули/процессы регистрируют в этом модуле callback-функции и "забывают" о необходимости каких-то там настроек портов и тому подобном.
Подскажите пожалуйста, правильно ли мне видится "идеал", и как такое лучше/правильнее сделать.
ага0 (2008-06-06 17:47:00) [1]
> тормозишь
Да? Та не, наверна проста глуп до изумлению, ага. Эх, жаль не знам смайлика "пожал плечами":(
2 Anatoly Podgoretsky © (06.06.08 15:57) [61]
>Чуть, чуть не дописал
Понял, отстал:))
> Palladin © (06.06.08 15:58) [62]
> ни в пайпах и ни в сокетах не шарю... вот какая...)
Да ладно те, въедешь, че там сложнова. Глано - нАчать:) Тады бери пайпы - с имя с нуля проще разбираться по-мойму. Эта опять-же ежель АПИ. А ежель компаненты - дык вон хоть TTcpServer/TcpClient - куды уж проще. Хошь на то, хошь на друго - недели точна не понадобитси:))
Anatoly Podgoretsky (2008-06-06 16:49:00) [2]> Palladin (06.06.2008 16:24:04) [64]
Я говорил похоже, поскольку надо еще разработать протокол обмена, но это касается любого метода.
Принцип то простой.
Подключился, спросил, отключился или сново пункт 2.
Обычный разговор, да и термин часто используется Conversation
Я говорил, что сервер надо так написать, чтобы не падал при любых ошибках.
Игорь Шевченко (2008-06-06 16:44:00) [3]
> А я чет не въехал:(
тормозишь
Palladin (2008-06-06 16:24:00) [4]я Сергея М. начитался... все получается куда хуже чем простой чат :)
Anatoly Podgoretsky (2008-06-06 16:06:00) [5]> Palladin (06.06.2008 15:58:02) [62]
Ну примеров в Дельфи достаточно, это по сути чат и такой пример как старт есть.
Принцип простой, слушать порт, пока кто то не постучится, можно обойтись даже и без множественных подключений, если сервер простой, одно соединение за раз. Для серверов самое сложное это не сокете/покеты, а что бы сервер крутился при любых условиях.
Palladin (2008-06-06 15:58:00) [6]ни в пайпах и ни в сокетах не шарю... вот какая...)
Anatoly Podgoretsky (2008-06-06 15:57:00) [7]> ага0 (06.06.2008 15:48:59) [59]
Чуть, чуть не дописал - сокеты, наиболее беспроблематичное и маштабируемое.
ага0 (2008-06-06 15:52:00) [8]2 Palladin ©
> просто пытаюсь построить локальный (относительно сервиса)
> лог-сервер для отладки и журналирования, того, что же происходит
> в приложении, особенно в сервисном... вот сижу уже с неделю,
> думаю, что выбрать, пайпы или сокеты или еще чего...
Крута:)) Да выбери хоть шо, какая разница-та:))
ага0 (2008-06-06 15:48:00) [9]
> Игорь Шевченко © (06.06.08 13:49) [51]
> Palladin © (06.06.08 13:43) [50]
>
> Натурально LPC :)
А я чет не въехал:( Я так понял, шо в LPC сервак не могет сам по себе че-нит слать клиенту, тока в ответ. Если ет так, то как ево к ентой теме прикрутить? Аль не так?
И ишшо - сервак по LPC могет клиентов тока последоватно обслужить, то бишь пока одному отвечает принять запрос от другого не могет? Или могет? А как?
> Anatoly Podgoretsky © (06.06.08 15:36) [58]
> > Palladin (06.06.2008 15:32:57) [57]
>
> Просто и надежно, работает и через Интернет и любые шлюзы.
>
Хто, LPC? А как?
Anatoly Podgoretsky (2008-06-06 15:36:00) [10]> Palladin (06.06.2008 15:32:57) [57]
Просто и надежно, работает и через Интернет и любые шлюзы.
Palladin (2008-06-06 15:32:00) [11]
> наиболее геморройный способ
в этом я уже убедился... просто пытаюсь построить локальный (относительно сервиса) лог-сервер для отладки и журналирования, того, что же происходит в приложении, особенно в сервисном... вот сижу уже с неделю, думаю, что выбрать, пайпы или сокеты или еще чего...
Игорь Шевченко (2008-06-06 15:19:00) [12]Palladin © (06.06.08 14:17) [54]
Я тебе могу сказать - это наиболее быстрый и наиболее геморройный способ организации межпроцессоного взаимодействия. В принципе, готовых примеров есть в тырнете.
Palladin (2008-06-06 14:18:00) [13]кажись самое оно под мою задумку...
Palladin (2008-06-06 14:17:00) [14]
> Игорь Шевченко © (06.06.08 13:49) [51]
хем ) интересно... ты меня заинтриговал...
Evgeny V (2008-06-06 14:05:00) [15]
> Anatoly Podgoretsky © (06.06.08 13:59) [52]
Не сообразил, увы еще не телепат. Но и про это я тоже вам написал в ответе, ошибки вернуться к вам позже, тем или иным способом, зависит от того в как вы работаете с неблокирующим сокетом.
> Evgeny V © (06.06.08 12:12) [44]
Anatoly Podgoretsky (2008-06-06 13:59:00) [16]> Evgeny V (06.06.2008 12:12:44) [44]
При неблокирующем режиме, никакие ошибки не возвращаются.
Если ты не сообразил, то я именно это и подчеркнул своим сообщением.
Игорь Шевченко (2008-06-06 13:49:00) [17]Palladin © (06.06.08 13:43) [50]
Натурально LPC :)
Palladin (2008-06-06 13:43:00) [18]
> Игорь Шевченко © (06.06.08 13:28) [49]
какие?
Игорь Шевченко (2008-06-06 13:28:00) [19]
> подскажи локальное решение общения между сервисом и клиентским
> приложением
натурально порты :)
Palladin (2008-06-06 13:18:00) [20]
> для локального решения в первую очередь нужно применять
> локальные решения
подскажи локальное решение общения между сервисом и клиентским приложением