// Overlapped.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
VOID CALLBACK CompletionRoutine(
_In_ DWORD ErrorCode,
_In_ DWORD ReturnLength,
_Inout_ LPOVERLAPPED Overlapped);
HANDLE __FileHandle = NULL;
char __BufferData[20] = {0};

int main()
{
BOOL IsOk = FALSE;
OVERLAPPED Overlapped = { 0 };
__FileHandle = CreateFile(L"ReadMe.txt", GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
if (__FileHandle == INVALID_HANDLE_VALUE)
{
int LastError = GetLastError();
goto Exit;
}
//通知IO有异步IO和Overlapped的设置,读四个字节每次
//不用等待是因为没有创建事件当然不用搞
//OverLapped这里的作用是利用Overlapped->Offset 往下加字节设置位置读取字节
IsOk = ReadFileEx(__FileHandle, __BufferData, 4,&Overlapped,
(LPOVERLAPPED_COMPLETION_ROUTINE)CompletionRoutine);
if (IsOk == FALSE)
{
int LastError = GetLastError();
if (LastError == ERROR_IO_PENDING)
{
}
}
Exit:
SleepEx(0,TRUE);//只有为TRUE时候,等待完成历程返回时退出
if (__FileHandle != NULL)
{
CloseHandle(__FileHandle);
__FileHandle = NULL;
}
printf("Input AnyKey To Exit\r\n");
getchar();
return 0;
}
VOID CALLBACK CompletionRoutine(
_In_ DWORD ErrorCode,
_In_ DWORD ReturnLength,
_Inout_ LPOVERLAPPED Overlapped
)
{
if (ErrorCode == ERROR_SUCCESS)
{
int i = 0;
for (i = 0; i < ReturnLength; i++)
{
printf("%c", __BufferData[i]);
}

Overlapped->Offset += ReturnLength;//
ReadFileEx(__FileHandle, __BufferData, 4, Overlapped,
(LPOVERLAPPED_COMPLETION_ROUTINE)CompletionRoutine);
}
else if (ErrorCode==ERROR_HANDLE_EOF)
{
//数据完成
printf("\r\n");
GetFileSize
}
else
{

}
}

转载于:https://www.cnblogs.com/L-Sunny/p/8389357.html

异步读写之利用完成历程相关推荐

  1. 磁盘文件的正常读写与异步读写

    磁盘文件的正常读写与异步读写 转自:http://222.30.226.10/hhcmc/study/teach_vc/teach_sp_52.htm 在Win32系统下文件可以支持平常的同步读写和异 ...

  2. 揭秘 React 异步获取数据的进化历程

    点击上方 前端瓶子君,关注公众号 回复算法,加入前端编程面试算法每日一题群 本篇文章,以模拟从『Hacker News API[1]』获取热门文章为例,通过一步步地代码优化和封装,阐述 React 异 ...

  3. 【FPGA】双端口RAM的设计(异步读写)

    上篇写了双端口RAM设计(同步读写):https://blog.csdn.net/Reborn_Lee/article/details/90647784 关于异步读写和同步读写,在单端口RAM设计中也 ...

  4. linux下aio异步读写详解与实例

    1.为什么会有异步I/O aio异步读写是在linux内核2.6之后才正式纳入其标准.之所以会增加此模块,是因为众所周知我们计算机CPU的执行速度远大于I/O读写的执行速度,如果我们用传统的阻塞式或非 ...

  5. python mongodb 异步_Python异步读写Mongodb(motor+asyncio)

    使用Python做大型计算任务时,并且用mongodb做数据储存时,常常面临大量读写数据库的情况.尤其是大量更新任务,由于不能批量操作,使用pymongo同步操作的话,相当耗时. 使用多线程.多进程确 ...

  6. 用API实现串口异步读写

    VB的MSCOMM控件虽然很好用,但是在没有装VB的机器上用该控件总觉得有些累赘,网上的VB API代码大部分都基于是同步方式,处理复杂的通信模式不是太理想,所以用了一些时间,把VC项目中的异步串口读 ...

  7. oracle读写文件--利用utl_file包对磁盘文件的读写操作

    oracle读写文件--利用utl_file包对磁盘文件的读写操作 摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做, ...

  8. boost::asio向socket中异步读写数据

    内容代码参考自: Boost.Asio C++ Network Programming Cookbook 异步写入数据的核心是异步回调函数. 在此之前, 必须弄明白异步IO的基本概念和回调函数触发的时 ...

  9. SpiFlash同步/异步读写单片机裸机实例

    单片机裸机开发中会经常遇到外设速度过慢,长时间读忙等待,但CPU又不能长时间阻塞的问题. 这种问题可以通过实现一个状态机来异步处理. 异步状态机代码结构示例: enum {eIDLE = 0,eSTA ...

  10. 利用async和await异步操作解决node.js里面fs模块异步读写,同步结果的问题

    async await 解决异步问题,这两个关键字是es7提出的,所以测试,node和浏览器版本提高一些 async await 操作基于promise实现的 async await这两个关键字是一起 ...

最新文章

  1. 高级数据结构讲解与案例分析
  2. 小学五年级计算机进度安排,五年级下册信息技术年度教学计划
  3. sql 新建发布 找不到存储过程_pgRouting教程九:使用GeoServer发布WMS/WFS接口
  4. ChaosBlade:从混沌工程实验工具到混沌工程平台
  5. 如何在一年内拥有十年的工作经验(值得你反复读5遍以上)
  6. 第32讲:实时处理利器 mitmproxy 的使用
  7. Cloud一分钟 | 一脚踏入云计算2.0时代,京东云这回拼的是“朋友 圈”;8400万元私有云招标...
  8. 华为P50 Pro最新渲染图曝光 预装鸿蒙HarmonyOS 2
  9. Spring+CXF的WebServices简单示例
  10. python自动生成坐标脚本_用一个简单的python脚本从经纬度坐标获得高程
  11. wing ide 3.x 中文设置
  12. 佳能9100cdn故障_佳能 打印机故障代码大全
  13. Hive On Spark搭建报错:Failed to create Spark client for Spark session xx: ..TimeoutException
  14. 关于C#GB2312编码问题
  15. win10怎么更新显卡驱动_AMD Radeon 20.5.1 驱动程序更新:新增支持 Win10 版本 2004
  16. 机器学习 集成学习的结合策略之stacking学习法
  17. Tomcat乱码全解决
  18. Perforce warning:Can't clobber writable file ...
  19. 南京信息工程大学python期末考试_考研想考南京信息工程大学怎么样?
  20. 由于正在等待重启以完成windows更新,因此Deep Freeze冰点无法安装的解决方法

热门文章

  1. c语言儿童教学_五岁儿童的自然语言处理
  2. 逻辑回归分析与回归分析_逻辑回归从零开始的情感分析
  3. pycharm快捷键之①“上下移动某一行“②参数提示
  4. 安装nltk,textacy库
  5. 可视化排班管理_呼叫中心外包之管理要点与数据分析对策
  6. linux界面右键无效,在linuxtkin中运行GUI时,右键单击菜单消失得太快
  7. myeclipse导入项目中文乱码_建立一个可烧录的空项目
  8. 取数游戏【dp+博弈】
  9. 23007 2017-2018-2 《程序设计与数据结构》第2周学习总结
  10. 【静态化平台】☞( 一)网页静态化服务