OVERLAPPED I/O 异步APC

 

APC简介:APC

附: 套接字中的WSAOVERLAPPED 和 OVERLAPPED 是一个东西. 

OVERLAPPED 中的InternalHigh 用于显示当前读取了多少字节. Internal 用于显示错误信息, 0 即无错误;

GetOverlappedResult 返回的字节以及错误都是根据 OVERLAPPED  结构中的字段来提取的.

这也是为什么GetOverlappedResult 需要的OVERLAPPED结构是一开始初始化的那个 

同时也是为什么每个io操作都需要唯一一份OVERLAPPED.

注意: 如果想要复用OVERLAPPED结构(即在一次操作完成之后) . 一定要memset OVERLAPPED ,让其内部清0 .因为内部还

残留上一次操作的记录;

 

第一个例子. 第二个例子使用APC 来解决一些问题

/*
   首先使用 OVERLAPPED  结构, 其中有Event 对象, 可用可不用,这个例子先不用

   CreateFile 其中一个参数使用 FILE_FLAG_OVERLAPPED 
    
   ReadFile  默认同步, 在最后一个参数使用 OVERLAPPED  ;
   ReadFile  返回TRUE ,则代表已经读完了
             否则应该检查 GetLastError , 系统是否为此安排了等待.

   如果 GetLastError == ERROR_IO_PENDING ,则成功了, 等着取数据, 否则失败

   之后可以使用 GetOverlappedResult(最后一个参数为TRUE) / WaitForSingObject 来等待直到完成;
   
    
*/


void read_overlapped(const TCHAR * path)
{
    //这里没有使用其中的 Event 对象. 
    OVERLAPPED overlap = {0};
    DWORD bytesReaded = 0;
    BOOL ret = FALSE;
    char * buf = new char[8196 * 10];

    // 注意:FILE_FLAG_OVERLAPPED 

    HANDLE hFile = CreateFile(path,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_OVE
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值