Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Объясните разницу между оповещением через Event и ReadFile  (Прочитано 4494 раз)
0 Пользователей и 1 Гость смотрят эту тему.
V-ctor
Гость
« : 06-04-2004 08:56 » 

Давно сделал оповещение апликухи о прерывании через Event, по этому событию тут же вычитывается блок данных с устройства. Всё красиво, все работает, не глючит.
Но тут подумал, что это довольно медленно пока там управление дойдет до моего потока, пока он сгенерит запрос, пока вычтется.
А хотелось бы что б вычитывалось как можно быстрее, после поступления прерывания.
Подумалось, что сделать синхронное чтение через цтл или ReadFile быстрее будет, ИРП уже сформирована и ждет токо обработки и как токо так сразу вычитывает и в мой поток.
Собсно 2 вопроса:
1 Правильно ли я понимаю или переключений будет стоко же и выигрыша никакого
2 Если 1- да то какова экономия? Не получится ли что сэкономятся такты (копейки)
3 Наскоко он меннее (более?)  надежен, т.к. я понял, что за всеми этими отложенными ИРП надо следить и потенциально (мне так кажется) это менне надежно.

Почему-то Слава называл такой метод не очень красивым когда-то. В чем некрасота?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 09-04-2004 18:59 » 

Все равно твой поток снимут с процессора(другие тоже хотят работать), а твой поток все равно сядет на ожидание(или в драйвере или в NtReadFile еще в ядре), например перейдя на ожидание какого-то объекта, или пустой цикл крутить начнет сам драйвер, заблокирова поток(ну это плохой вариант). Остановить Irp надо в драйвере- или запендить или просто держать, если держать на IRQL>=DISPATCH то процессор на котором твой поток выполняется будет недоступен для переключения на другие потоки,  в случае одного процессора система зависнет, если  IRQL<DISPATCH то поток снимут с процессора когда квант времени истечет . Если запендить запрос(STATUS_PENDING вернуть и отложить обработку) произойдет переход на ожидание по ивенту(если запрос синхронный) и поток снимут с процессора.
По моему мнению вигрыша никакого, так как механизм тот же задействуется- планировщик потоков.
Записан
V-ctor
Гость
« Ответ #2 : 13-04-2004 06:09 » 

Понятно, спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines