Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Есть как минимум два правильных способа и целая куча неправильных 15.03.05 10:52 Число просмотров: 2134
Автор: amirul <Serge> Статус: The Elderman
|
> А как лучше это сделать? Обращаться из третьего кольца к > драйверу по несколько раз в секунду, проверяя его > состояние? Хотя может вызывать несколько раз в секунду > DeviceIoControl() - это не так накладно для процессора. > Может есть какой другой способ?
Правильный способ №1:
DeviceIoControl, драйвер принимает его и возвращает STATUS_PENDING. Сам DeviceIoControl можно запустить в синхронном режиме в отдельном потоке, тогда поток вернется из этой функции только после того, как IRP с этим запросом будет завершен. Либо можно запустить DeviceIoControl в асинхронном режиме (OVERLAPPED в Win32) и дальше делать что угодно: периодически проверять статус, ожидать на событии и пр. - любой тип синхронизации, который нравится.
Правильный способ №2:
Поставить какой нибудь поток в состояние "тревожного ожидания" (alertable wait mode). И в драйвере поставить в этот поток APC user-ского режима. (этот способ более сложный но тем не менее вполне правильный - насколько я знаю, именно так доставляются оконные сообщения в Win32).
Ну а неправильные: постоянный полл, постоянный полл с задержками и прочие извращения
|
|
|