Я немного смущен тем, что на самом деле происходит, когда порт завершения ввода-вывода завершается.
Я предполагаю, что Win API разрешает доступ к очереди IOCP, которая каким-то образом может ставить в очередь (или складывать) ссылку обратного вызова с определенным дескриптором (скажем, сокет). Когда Windows получает прерывание от NIC, тогда оно в какой-то момент попадает в очередь IOCP для NIC и выполняет обратные вызовы в своем собственном (IOCP) пуле потоков.
Мой вопрос: этот поток из пула потоков порожден при получении прерывания, или он на самом деле порожден при вызове Win API, фактически имея поток в состоянии ожидания, пока он не будет разбужен IOCP очередь?
РЕДАКТИРОВАТЬ:
Я нашел это: http://msmvps.com/blogs/luisabreu/archive/2009/06/04/multithreading-io-and-the-thread-pool.aspx где заявляет: «Когда эта операция завершается, он ставит пакет в очередь на этот порт завершения ввода-вывода. Затем порт продолжит работу и будет использовать один из потоков пула потоков для выполнения указанного вами обратного вызова». em >
GetQueuedCompletionStatus()
с его параметромdwMillisecond
, установленным на ненулевое значение, тогда да, вызывающий поток будет заблокирован до завершения IOCP или истечения тайм-аута, в зависимости от того, что произойдет раньше. - person Remy Lebeau   schedule 02.11.2012