Правильная организация работа вспомогательного треда в драйвере.

Тема в разделе "WASM.NT.KERNEL", создана пользователем neutronion, 23 апр 2011.

  1. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    В драйвере необходимо создать тред, который будет ожидать события, затем если событие пришло выполнять некую работу и снова ожидать.
    Вопрос, такой: Нет ли в такой схеме, что-нибудь кривого, так как в некоторых
    исходниках вижу, что тред не ждет все время, а только определенный таймаут.
    Т.е. делает пустую работу, затем снова ждет таймаут в ожидании события.
    Если событие пришло, то делает полезную работу и снова ожидает события или таймаута. Вот и возник вопрос, почему просто не сидеть и ждать события, почему
    существует таймаут, раз по его истечении все-равно ничего полезного не делается? Может есть какие-то системные механизмы, которые предпочитают, чтобы треды работали именно так, а не долго ждали на событии?
     
  2. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    neutronion
    Приведите пару примеров кода где это наблюдается.
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Может быть, всё таки делается, просто ты не смог разглядеть, что именно? Если всё же действительно ничего не делается, то, возможно, это просто задел на будущее? Надо код смотреть. Ну а так вообще это же классическая схема работы таймера, ничего удивительного быть не должно.

    Ни о чём подобном не слышал.
     
  4. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Я жутко извиняюсь, сморозил, конечно происходит. Проверяется переменная пора ли
    удалить этот тред или нет, типа полинга.
     
  5. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Да, вполне обычная схема.
    Хотя я в таких случаях два события делаю.
     
  6. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    так делается когда тред ждёт на специализированном Waiter-е
    например на KeRemoveQueue
    я обычно жду с таймаутом и проверкой на (gShutdown && (gRequestsInProgress == 0))
    иначе остановить этот тред без падения в синьку трудновато
     
  7. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Я тоже так думал сделать, но побоялся усложнений кода.