|
|
|
как сообщить программе о события COM-порта
|
|||
|---|---|---|---|
|
#18+
Хочу написать библиотеку для работы с последовательным портом под Windows. Как лучше сообщать программе о событии, связанным портом (например, пришёл символ, переда очередной пвкет)? Как я понимаю, можно использольвать механизм сообщения, использовать объекты ядра Event. Может быть есть какой-нибудь другой вариант. Хотелось бы, чтобы класс для работы с устройством имеел удобный интерфейс и мог легко использоваться любой программой Windows, которой нужно использовать последовательный порт. Зараннее спасибо за любую информацию по данному вопросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 10:36 |
|
||
|
как сообщить программе о события COM-порта
|
|||
|---|---|---|---|
|
#18+
Да. Каким-то образом обработчик вешается. В классе можно сдалать регистрацию каллбеков. Любой класс использующий этот класс порта будет регестрировать свой каллбек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 10:50 |
|
||
|
как сообщить программе о события COM-порта
|
|||
|---|---|---|---|
|
#18+
OLEG_2005Хочу написать библиотеку для работы с последовательным портом под Windows. Как лучше сообщать программе о событии, связанным портом (например, пришёл символ, переда очередной пвкет)? Как я понимаю, можно использольвать механизм сообщения, использовать объекты ядра Event. Может быть есть какой-нибудь другой вариант. Хотелось бы, чтобы класс для работы с устройством имеел удобный интерфейс и мог легко использоваться любой программой Windows, которой нужно использовать последовательный порт. Зараннее спасибо за любую информацию по данному вопросу.Странное желание, ибо: 1)есть давно и много софта с разным подходом; 2)RS-232(485) умирает и спроса у новых софтверов нет, старые и так знают как работать. 3)удобный внешний интерфейс - дело вкуса. Внутри обслуживание любого внешнего устройства реализуется через прерывания (дабы не загружать процессор). Снаружи: мне, например, не нравятся прерывания, и я предпочитаю писать отдельный поток ожидания входного символа, т.е. весь интерфейс сводится к read/write и функции проверки. Кому-то нравится прописывать обработку прерывания по приходу символа, но надо обеспечивать реентерабельность. Пакет, который я использую для BCB (AsyncProfessional) - open-source, поддерживает все механизмы. Полно также готовых ActiveX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 10:51 |
|
||
|
как сообщить программе о события COM-порта
|
|||
|---|---|---|---|
|
#18+
Внутри класса есть поток, который читает данные из порта и пишет в порт. Меня интересует, как лучше информировать программу о событии. Задача с COM-портом частная, вопрос можно сформулировать так, как оповещать программу о каком-то событии, которое происходит асинхронно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 11:09 |
|
||
|
как сообщить программе о события COM-порта
|
|||
|---|---|---|---|
|
#18+
OLEG_2005Внутри класса есть поток, который читает данные из порта и пишет в порт. Меня интересует, как лучше информировать программу о событии. Задача с COM-портом частная, вопрос можно сформулировать так, как оповещать программу о каком-то событии, которое происходит асинхронно.Упрощая: модуль-контейнер передаст твоему классу адрес функции(ий), которую(ые) твой класс будет вызывать в разных ситуациях. Такая функция называется callback. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 11:37 |
|
||
|
как сообщить программе о события COM-порта
|
|||
|---|---|---|---|
|
#18+
Я правильно понял нужно использовать указатель на функцию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 15:27 |
|
||
|
как сообщить программе о события COM-порта
|
|||
|---|---|---|---|
|
#18+
OLEG_2005Я правильно понял нужно использовать указатель на функцию?Правильно. Но (см. мой первый пост) зачем? Я же написал есть open source. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 17:44 |
|
||
|
как сообщить программе о события COM-порта
|
|||
|---|---|---|---|
|
#18+
Хотелось бы, чтобы библиотека была максимально компактной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 17:54 |
|
||
|
как сообщить программе о события COM-порта
|
|||
|---|---|---|---|
|
#18+
CreateFile + FILE_FLAG_OVERLAPPED + CreateEvent + SetCommMask + SetCommTimeouts + WaitComEvent + GetOverLappedResult + и т.д. Всё в отдельном потоке + синхронизация ... Это если так хочется делать самому. С этим всем, конечно, надо разобраться, чтобы понимать, как оно работает, но стоит сначала попробовать готовый велосипед, который уже называли: http://sourceforge.net/projects/tpapro/ Вполне может подойти... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 18:30 |
|
||
|
как сообщить программе о события COM-порта
|
|||
|---|---|---|---|
|
#18+
А так уж нужно использовать WaitComEvent. Нельзя ли в асинхронному режиме обойтись только функциями ReadFile и WriteFile? Поток для работы с портом мог бы сначала писать в порт, если что-порт, а зате читать порт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 08:36 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34291864&tid=2029542]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
188ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 512ms |

| 0 / 0 |
