OVERLAPPED结构--异步IO
2017-03-19 16:35
260 查看
I/O操作可以算得上是计算机执行操作中最慢、最不可测的。所以当我们线程需要向一个设备I/O操作的时候,可以给设备一个“表单”,你先去干这个,干完结果写在这个表单里面寄给我就行了,而自己则去重点内容搞其事情。当这个设备把事情干完了,就会把这个表单填好通知应用程序。这就是异步I/O。而这个“表单”就是OVERLAPPED结构。 为什么要叫OVERLAPPED结构呢?因为I/O操作的时间和线程执行其它任务的时间是重叠(OVERLAPPED)的。 typedef struct _OVERLAPPED { DWORD Internal; DWORD InternalHigh; DWORD Offset; DWORD OffsetHigh; HANDLE hEvent; } OVERLAPPED; 这五个成员里面有两个完全就是给文件准备的Offset和OffesetHigh。异步I/O会忽略文件指针,但是当多次对文件进行ReadFile时,想从上一次结束位子开始读的话。那怎么办呢?我们就是用这两个参数来做个标记。 因为这两个参数是给文件准备的,所以对非文件设备我们必须把它初始化0。 而hEvent成员,主要是IO操作完成时,用来找人的,相当于一个地址ID。一般是IOCP方法使用的。 internal是错误码,internalHigh是传输字节。这个两个是IO操作完成后需要填写的内容。 异步I/O请求完成时,我们会收到来自执行I/O的设备发来的这个“表单”(OVERLAPPED结构)。但是,这个原始表单数据略显单薄。而如果我们想知道更多东西怎么办呢?比如,我想知道是哪个设备在搞这个。我就要求他把他的设备句柄一起填在上面。 我们可以自己派生这个OVERLAPPED结构。里面可以添加任何我们想要的附加信息。
相关文章推荐
- 异步IO模型和Overlapped结构
- Overlapped I/O 和 完成端口等异步IO在内核中的通知方式
- 异步IO模型和Overlapped结构(转)
- OVERLAPPED结构
- OVERLAPPED结构与GetOverlappedResult函数
- 包含WSAOVERLAPPED的自定义结构
- 异步IO模型和Overlapped结构
- 异步IO模型和Overlapped结构
- OVERLAPPED结构与GetOverlappedResult函数
- 异步IO模型和Overlapped结构
- OVERLAPPED结构与GetOverlappedResult函数
- 完成端口与套接字绑定的OVERLAPPED结构释放问题
- 问题:为什么OVERLAPPED结构中的event必须得是手动的event
- overlapped I/O 重叠结构 一
- overlapped 结构
- OVERLAPPED结构与GetOverlappedResult函数
- visual C++ MFC串口编程overlapped结构汇总
- .net的三层结构体系
- OpenLayers 项目完整分析——(二)源代码总体结构分析
- 浅谈“三层结构”原理与用意