В драйвере необходимо создать тред, который будет ожидать события, затем если событие пришло выполнять некую работу и снова ожидать. Вопрос, такой: Нет ли в такой схеме, что-нибудь кривого, так как в некоторых исходниках вижу, что тред не ждет все время, а только определенный таймаут. Т.е. делает пустую работу, затем снова ждет таймаут в ожидании события. Если событие пришло, то делает полезную работу и снова ожидает события или таймаута. Вот и возник вопрос, почему просто не сидеть и ждать события, почему существует таймаут, раз по его истечении все-равно ничего полезного не делается? Может есть какие-то системные механизмы, которые предпочитают, чтобы треды работали именно так, а не долго ждали на событии?
Может быть, всё таки делается, просто ты не смог разглядеть, что именно? Если всё же действительно ничего не делается, то, возможно, это просто задел на будущее? Надо код смотреть. Ну а так вообще это же классическая схема работы таймера, ничего удивительного быть не должно. Ни о чём подобном не слышал.
Я жутко извиняюсь, сморозил, конечно происходит. Проверяется переменная пора ли удалить этот тред или нет, типа полинга.
так делается когда тред ждёт на специализированном Waiter-е например на KeRemoveQueue я обычно жду с таймаутом и проверкой на (gShutdown && (gRequestsInProgress == 0)) иначе остановить этот тред без падения в синьку трудновато