PoEdu-Windows班-007 异步I/O
来源:互联网 发布:广场舞下载软件 编辑:程序博客网 时间:2024/05/17 00:59
一、获取文件大小信息:
获取文件大小:GetFileSizeEx()
BOOL GetFileSizeEx(
HANDLE hFile, // handle to file
PLARGE_INTEGER lpFileSize // file size
);
获取文件在磁盘中占用的大小:GetCompressedFileSize()
DWORD GetCompressedFileSize(
LPCTSTR lpFileName, // file name
LPDWORD lpFileSizeHigh // high-order DWORD of file size
);
其返回值是DDWORD的低32位,第二个参数是高32位。
二、异步I/O
概念:
异步IO的概念和同步IO相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数 据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异步IO,在发起IO请求到实际使用数据这段时间 内,程序还可以继续做其他事情。 -------来源于百度百科CreateFile设置异步通讯方式:
将其倒数第二个参数(dwFlagsAndAttributes)设置为:FILE_FLAG_OVERLAPPED。OVERLAPPED结构体:
typedef struct _OVERLAPPED{
ULONG_PTR Internal;//操作系统保留,指出一个和系统相关的状态
ULONG_PTR InternalHigh;//指出发送或接收的数据长度
union
{
struct{
DWORD Offset; //文件传送的字节偏移量的低位字DWORD OffsetHigh;//文件传送的字节偏移量的高位字
};PVOID Pointer; //指针,指向文件传送位置
};} OVERLAPPED, *LPOVERLAPPED;
HANDLE hEvent; //指定一个I/O操作完成后触发的事件
如何判断ReadFile/WriteFile是否成功?
三、异步I/O完成提醒方式:
使用设备内核对象
WaitForSingleObject()来等待一个对象的完成。使用事件内核对象
需要使用CreateEvent(nullptr,TRUE,FALSE,TEXT(“EventName”));来创建一个事件对象。(每一个事件对象在操作系统的是唯一的,可以跨程序使用,和互斥体类似)程序示例:
可提醒I/O
APC机制:当线程为可提醒状态下(可以理解为非繁忙状态) 执行APC列表中的事情(自动执行)。Wait系列函数,SleepEx函数等可将线程设置为可提醒状态。
需要使用ReadFileEx和WriteFileEx函数。
程序示例:
I/O完成端口
CreateIoCompletionPort()函数:HANDLE CreateIoCompletionPort
(
HANDLE FileHandle, // handle to file);
HANDLE ExistingCompletionPort, // handle to I/O completion port
ULONG_PTR CompletionKey, // completion key
DWORD NumberOfConcurrentThreads // number of threads to execute concurrently
程序示例:
阅读全文
1 0
- PoEdu-Windows班-007 异步I/O
- windows I/O异步设计~
- PoEdu-Windows班-001操作系统
- PoEdu-Windows班-003 IO
- PoEdu-Windows班-009 多线程
- Windows的同步I/O和异步I/O
- Windows的同步I/O和异步I/O
- Windows系统编程之异步I/O
- Windows 命名管道 + 异步I/O模型
- Windows 命名管道 + 异步I/O模型
- PoEdu-Windows班-004 文件操作
- 异步文件 I/O
- 异步I/O
- 异步I/O机制
- I/O 异步访问
- 异步I/O
- I/O异步demo
- 异步I/O
- 软件工程实验
- cocos2dx3.14.1+win10+VS2017环境搭建
- 结构体字节对齐规则
- oracle正则表达式 [^-]是什么意思?表示不是'-'的字符
- 获取高度宽度
- PoEdu-Windows班-007 异步I/O
- Linux内核链表之哈希链表
- 合法练习黑客技术?这15个网站也许可以帮到你
- 常用Linux命令:grep
- js 鼠标移入渐变效果
- 网络流二十四题 最长 k 可重区间集
- Julia: eval的一些用法
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增模块管理界面导出功能(可按条件导出)
- 常用控件