ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
222017 Топик полностью
Ксения (15.11.2010 20:12 - 20:19, просмотров: 298) ответил Гудвин на Вы забыли всего один, но существенный момент :) Если выдернуть usb шнурок непосредственно во время обмена (а оно по закону бутерброда всегда так), то все эти ваши танцы с бубнами зависшему драйверу VCP глубоко фиолетовы :) А вот HID в этом плане
Виртуальной COM-порт никогла не зависает, если с ним грамотно обращаться Если выдерните шнурок, то операции чтения и записи прекратятся, как и следовало ожидать. А вы что хотели, если связь прервана? Но никаких внештатных ошибок система при этом не выдает. А выглядит это так, что ничего не принимается, а попытка писать в порт возвращает признак неудачи и нулевое число переданных байт. Где здесь повисание? Точно так же в этой ситуации ведет себя и обычный RS-232. Мы же не жалуемся, что он виснет? Одно только условие необходимо соблюсти - когда через сообщение WM_DEVICECHANGE выясняется, что устройство отсоединено (не отвечает на интерфейстную команду CLEAR BREAK) порт надо немедленно закрыть (как CloseHandle). Если этого не сделать, а оставить порт открытым до тех пор, пока устройство внова не воткнут, то только тогда возникнет ступорная ституация - открытый ранее порт не будет работать на "новой сессии". И если его даже закрыть с опозданием, то может не открыться заново. Возможно это и недоработка Микрософт, но и программист здесь тоже виноват, раз не учел эту ситуацию. Я же объясняю, как ее надо обходить, чтобы порт никогда не вис. А ваш HID - слишком медленный. Если ваше устройство такое же тормозное, как мышь, то HID вам вполне подойдет. А режим Full-speed вряд ли HID обеспечит. Впрочем, я с интересом послушала бы отклики об успешных попытках запустить Full-speed на HID-девайсе.