Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
DeviceIOControl - СОМ порт |
Философия, технологии, алгоритмы! |
|
Опции темы |
16.12.2005, 17:24 | #1 |
Покинул БВФ
Сообщений: 469
Регистрация: 28.06.2005
Не в сети |
DeviceIOControl - СОМ порт
Привет всем! Хочу посмотреть статистику переданных-принятых байт.
Использую функцию DeviceIOControl(h,a,addr(dw1),4,addr(dw2),4,dwret, nil) где a = 1769612 (CTLCODE: IOCTL_Serial_Get_Stats). При работе с портом функуия не работает, т.е. пезультат равен false. Где копать? Или как организовать поток, который бы, зная только хэндл открытого порта, ловил моменты отправки и приёмки символов? Ессно без написания своего драйвера.Привет всем! Хочу посмотреть статистику переданных-принятых байт. Использую функцию DeviceIOControl(h,a,addr(dw1),4,addr(dw2),4,dwret, nil) где a = 1769612 (CTLCODE: IOCTL_Serial_Get_Stats). При работе с портом функуия не работает, т.е. пезультат равен false. Где копать? Или как организовать поток, который бы, зная только хэндл открытого порта, ловил моменты отправки и приёмки символов? Ессно без написания своего драйвера. |
18.12.2005, 06:59 | #4 |
Форумец
Сообщений: 223
Регистрация: 11.12.2004
Не в сети |
Я говорил про события в смысле объект синхронизации (см MSDN lib). Их ждать с помощью WaitForMultipleObjectsEx(...) например. Сперва их создаешь с помощью CreateEvent(...), затем при запросе чтения или записи передаешь в структуре OVERLAPPED драйверу. При этом функции чтения и записи работают в неблокирующем режиме - сразу возвращаются.
А ты в своем потоке ждешь когда освободятся события. Когда это случится значит запрос выполнен - либо передал требуемое количество байт, либо принял, либо истек таймаут. |