I/O异步完成
问题描述:
在下面,它说I/O句柄必须与线程池关联,但我找不到在给定示例中句柄与线程关联的位置。 哪个函数或代码有助于绑定该示例中的文件句柄?I/O异步完成
使用异步I/O完成事件,线程池中的线程仅在接收到数据时处理数据,并且一旦数据处理完毕,线程就返回到线程池。 要进行异步I/O调用,操作系统I/O句柄必须与线程池相关联,并且必须指定回调方法。当I/O操作完成时,线程池中的线程会调用回调方法。 http://msdn.microsoft.com/en-us/library/aa720215(VS.71).aspx
答
在该网页上的C#示例,在ProcessImagesInBulk
,你会看到以下内容:
AsyncCallback readImageCallback = new AsyncCallback(ReadInImageCallback);
for(int i=0; i<numImages; i++)
{
...
fs.BeginRead(state.pixels, 0, numPixels, readImageCallback, state);
}
在这种情况下,FileStream.BeginRead
电话是什么是启动异步I/O。回读参数(这里是:readImageCallback
)是读取完成时调用的参数。
句柄与线程的绑定在库代码后面被抽象出来。我不知道为什么那篇文章甚至提到它。在.NET的情况下,回调在.NET ThreadPool上调用,这是将线程与I/O完成相关联的东西。