Apple

Forum Replies Created

Viewing 1 post (of 1 total)
  • Author
    Posts
  • in reply to: Aadapter associated packet queue checkup #6475
    Apple
    Participant

      @SerpentFly wrote:

      Когда драйвер перехватывает пакет, он его ставит в очередь и выставляет событие сигнализирующее, что очередь не пуста. User-mode поток ожидающий (WaitForSingleObject/WaitForMultipleObjects) на этом событии пробуждается ото сна и читает пакеты из очереди пока они не закончатся, затем ресетит событие и снова ждет на нем. В общем-то, пример passthru показывает как это делается.

      Альтернатива – polling пакетов без использования событий (пробуем читать пакет, если чтение успешно, то вычитываем все пакеты пока не кончаться, если чтение неуспешно – засыпаем на какое-то время, пример packetsniffer), но на мой взгляд этот метод менее эффективен.

      А почему же в примере passthru – эвент резетится сразу же после WaitForSingleObject? Вот кусок кода примера passthru


      ...............
      while (counter != 0)
      {
      WaitForSingleObject ( hEvent, INFINITE );
      ResetEvent(hEvent);

      while(api.ReadPacket(&Request))
      {
      counter--;
      ..................

      Баг? Или я что-то не понял?

    Viewing 1 post (of 1 total)