Старый 16.12.2005, 17:24   #1   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
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. Где копать?

Или как организовать поток, который бы, зная только хэндл открытого порта, ловил моменты отправки и приёмки символов? Ессно без написания своего драйвера.
  Ответить с цитированием
Старый 17.12.2005, 07:21   #2   
Форумец
 
Сообщений: 223
Регистрация: 11.12.2004

Handle вне форума Не в сети
Надо использовать асинхронный ввод-вывод. А в паралельном потоке ждать установки событий чтения или записи, которые устанавливаются драйвером.
  Ответить с цитированием
Старый 17.12.2005, 11:04   #3   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
И как их ждать? WaitCommEvent даже в парадельном потоке наглухо всё вешает.
  Ответить с цитированием
Старый 18.12.2005, 06:59   #4   
Форумец
 
Сообщений: 223
Регистрация: 11.12.2004

Handle вне форума Не в сети
Я говорил про события в смысле объект синхронизации (см MSDN lib). Их ждать с помощью WaitForMultipleObjectsEx(...) например. Сперва их создаешь с помощью CreateEvent(...), затем при запросе чтения или записи передаешь в структуре OVERLAPPED драйверу. При этом функции чтения и записи работают в неблокирующем режиме - сразу возвращаются.

А ты в своем потоке ждешь когда освободятся события. Когда это случится значит запрос выполнен - либо передал требуемое количество байт, либо принял, либо истек таймаут.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind