1 ReadFileEx定义

BOOL WINAPI ReadFileEx(
  __in HANDLE hFile,
  __out LPVOID lpBuffer,
  __in DWORD nNumberOfBytesToRead,
  __in LPOVERLAPPED lpOverlapped,
  __in LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
  );

文件的偏移在lpOverlapped里面指定,这个结构体定义如下

typedef struct _OVERLAPPED
{
  ULONG_PTR Internal;
  ULONG_PTR InternalHigh;
  union {
    struct {
      DWORD Offset;
      DWORD OffsetHigh;
        };
    PVOID Pointer;
  }; HANDLE hEvent;  //在ReadFileEx这里,这个成员没用到
} OVERLAPPED, *LPOVERLAPPED;

Internal和InternalHigh其实就是IO_STATUS_BLOCK里面的成员,也就是说Internal表示本次IO的结果,InternalHigh表示本次IO的实际大小

typedef struct _IO_STATUS_BLOCK {
  union {
    NTSTATUS Status;
    PVOID Pointer;
  };
  ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

可以调用GetOverlappedResult来判断IO的情况

BOOL WINAPI GetOverlappedResult(
  __in HANDLE hFile,
  __in LPOVERLAPPED lpOverlapped,
  __out LPDWORD lpNumberOfBytesTransferred,
  __in BOOL bWait //表示是否需要等待,如果IO还处于PENDING状态,其实内部就是调用WaitForSingleObject进行等待
);

2 GetOverlappedResult的bWait含义

GetOverlappedResult的bWait含义表示是否需要等待,如果IO还处于PENDING状态,内部大概实现是这样

  hObject = lpOverlapped->hEvent ? lpOverlapped->hEvent : hFile;
  WaitStatus = WaitForSingleObject(hObject, INFINITE);

异步机制 - ReadFileEx(WriteFileEx)的更多相关文章

  1. 结合源码看nginx-1.4.0之nginx异步机制详解

    目录 0. 摘要 1. nginx异步设计思想 2. nginx异步设计数据结构 3. nginx异步机制源码解析 4. 一个简单的应用异步例子 5. 小结 6. 参考源码

  2. JavaScript的异步机制

    我们经常说JS是单线程的,比如node.js研讨会上大家都说JS的特色之一是单线程的,这样使JS更简单明了,可是大家真的理解所谓JS的单线程机制吗?单线程时,基于事件的异步机制又该当如何 1 先看下两 ...

  3. JavaScript单线程和异步机制

    随着对JavaScript学习的深入和实践经验的积累,一些原理和底层的东西也开始逐渐了解.早先也看过一些关于js单线程和事件循环的文章,不过当时看的似懂非懂,只留了一个大概的印象:浏览器中的js程序时 ...

  4. 深入理解Spring的异步机制

    一.Spring中实现异步执行 在这里我先以事件的机制举例,注意默认情况下事件的发布与监听都是同步执行的.那么我们来看一看基于异步事件的例子该怎么写 首先还是定义事件: package com.bdq ...

  5. [转]JavaScript异步机制详解

    原文: https://www.jianshu.com/p/4ea4ee713ead --------------------------------------------------------- ...

  6. Windows store app[Part 4]:深入WinRT的异步机制

    接上篇Windows store app[Part 3]:认识WinRT的异步机制 WinRT异步机制回顾: IAsyncInfo接口:WinRT下异步功能的核心,该接口提供所有异步操作的基本功能,如 ...

  7. Windows store app[Part 3]:认识WinRT的异步机制

    WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...

  8. 前端知识点回顾之重点篇——JavaScript异步机制

    JavaScript异步机制 来源:https://www.cnblogs.com/zhaodongyu/p/3922961.html JavaScript是单线程异步执行的,单线程意味着代码在任务队 ...

  9. Js异步机制的实现

    Js异步机制 JavaScript是一门单线程语言,所谓单线程,就是指一次只能完成一件任务,如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推.这种模式的好处是实现起来比较简单 ...

随机推荐

  1. JDBC 复习5 mysql 的自增长主键 auto_increment

    MySQL 自增长主键 (1)如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号.编号从1开始,并1为基数递增. (2)把0插入AUTO_INCRE ...

  2. map自定义键值类型

    map自定义键值类型 改变Map的默认比较方式 https://www.cnblogs.com/zjfdlut/archive/2011/08/12/2135698.html 大家知道,STL中的ma ...

  3. SSRF(服务端请求伪造)

  4. bootstrap 分页行数选择按钮失效

    原因是bootstrap.js重复加载,button点击作用两次,导致没效果

  5. 分析可变形字符串序列StringBuilder 以及 StringBuffer之默认大小与扩容

    默认值初始化: 1.  首先明确 StringBuffer类与 StringBuilder类均继承了抽象类 AbstractStringBuilder类 无参构造方法 2. 源码中StringBuff ...

  6. mongodb的基本操作之数据创建索引

    在数据量较少时,不使用索引,查询是很快的,但是在数据量较大时,查询将会变得非常缓慢,在mongodb中 查看索引 > db.test_collection.getIndexes() [ { &q ...

  7. 学JAVA有哪些好的技巧方法?干货分享

    作为编程语言届的老大哥,学习JAVA的人数不胜数,在这里分享一些学习JAVA的技巧以及方法,当然,这些技巧及方法使用范围包含但不限于JAVA. ① 笔记软件 印象笔记:多端互通很方便(https:// ...

  8. Codeforces 1187 F - Expected Square Beauty

    F - Expected Square Beauty 思路:https://codeforces.com/blog/entry/68111 代码: #pragma GCC optimize(2) #p ...

  9. 推荐排序---Learning to Rank:从 pointwise 和 pairwise 到 listwise,经典模型与优缺点

    转载:https://blog.csdn.net/lipengcn/article/details/80373744 Ranking 是信息检索领域的基本问题,也是搜索引擎背后的重要组成模块. 本文将 ...

  10. python_字符串方法

    1.字符串大小写转 value = "wangdianchao" # 转换为大写 big_value = value.upper() print(big_value) # 转换为小 ...