OVERLAPPED结构--异步IO

    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结构。里面可以添加任何我们想要的附加信息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值