Асинхронное завершение ввода / вывода - PullRequest
0 голосов
/ 27 мая 2010

Далее сказано, что дескриптор ввода-вывода должен быть связан с пулом потоков, но я не смог найти, где в данном примере дескриптор связан с потоком. Какая функция или код помогает связать дескриптор файла в этом примере?

Используя события завершения асинхронного ввода-вывода, поток из пула потоков обрабатывает данные только при получении данных, а после обработки поток возвращается в пул потоков. Чтобы выполнить асинхронный вызов ввода-вывода, дескриптор ввода-вывода операционной системы должен быть связан с пулом потоков, и должен быть указан метод обратного вызова. Когда операция ввода-вывода завершается, поток из пула потоков вызывает метод обратного вызова. http://msdn.microsoft.com/en-us/library/aa720215(VS.71).aspx

1 Ответ

0 голосов
/ 27 мая 2010

В примере C # на этой странице в ProcessImagesInBulk вы увидите следующее:

  AsyncCallback readImageCallback = new AsyncCallback(ReadInImageCallback);
  for(int i=0; i<numImages; i++)
  {
     ...
     fs.BeginRead(state.pixels, 0, numPixels, readImageCallback, state);
  }

В этом случае вызов FileStream.BeginRead запускает асинхронный ввод-вывод. Параметр обратного вызова (здесь: readImageCallback) - это то, что вызывается после завершения чтения.

Привязка дескриптора к потоку абстрагируется от кода библиотеки. Я не уверен, почему эта статья даже упоминает об этом. В случае .NET обратный вызов вызывается в .NET ThreadPool , что связывает поток с завершением ввода / вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...