Windows学习(005)--异步IO
来源:互联网 发布:微信拼团软件 编辑:程序博客网 时间:2024/06/05 19:32
1.异步I/O提醒方式。
- 设备内核对象。
- 时间内核对象。
- 可提醒I/O。
- I/O完成端口。
2.使用事件内核对象完成I/O提醒操作。
- 事件内核对象纯在操作系统里面,是所有程序共享。
- 可以用于程序之间交互。
- 简单实现:
int _tmain(int argc, _TCHAR* argv[]){ HANDLE hFile=CreateFile(TEXT("demo.txt"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_FLAG_OVERLAPPED, nullptr);//事件内核对象 if (hFile != INVALID_HANDLE_VALUE) { //Read BYTE bReadBuffer[100] = { 0 }; OVERLAPPED oRead = { 0 }; oRead.Offset = 0; oRead.hEvent = CreateEvent(nullptr, TRUE, FALSE, TEXT("ReadEvent")); ReadFile(hFile, bReadBuffer, sizeof(bReadBuffer), nullptr, &oRead); //Write BYTE bReadBuffer[5] = { 1,2,3,4,5 }; OVERLAPPED oWrite = { 0 }; oWrite.Offset = 0; oWrite.hEvent = CreateEvent(nullptr, TRUE, FALSE, TEXT("WriteEvent")); WriteFile(hFile, bReadBuffer, sizeof(bReadBuffer), nullptr, &oWrite); //Do some.. //其它线程 HANDLE hOverLapped[2] = {0}; hOverLapped[0] = oRead.hEvent; hOverLapped[1] = oWrite.hEvent; while (true) { DWORD dwCase = WaitForMultipleObjects(2, hOverLapped, FALSE, INFINITE); switch (dwCase - WAIT_OBJECT_0) { case 1: //读完成 case 2: //写完成 default: break; } } } else { } return 0;}
3.可提醒IO。
- 发送请求->完成后,操作提醒来做。
- APC机制,进程->线程,当线程闲的时候(可提醒状态),线程来做APC列表中的事情。
- 简单代码:
#include <Windows.h>VOID CALLBACK FileIOCompletionRoutine( _In_ DWORD dwErrorCode, _In_ DWORD dwNumberOfBytesTransfered, _Inout_ LPOVERLAPPED lpOverlapped ){ MessageBox(nullptr, TEXT("Read"), TEXT("Read"), MB_OK);}int _tmain(int argc, _TCHAR* argv[]){ HANDLE hFile = CreateFile(TEXT("demo.txt"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_FLAG_OVERLAPPED, nullptr);//事件内核对象 if (INVALID_HANDLE_VALUE != hFile) { BYTE bReadBuff[255] = { 0 }; OVERLAPPED oRead = { 0 }; ReadFileEx(hFile, bReadBuff, 255, &oRead, FileIOCompletionRoutine); SleepEx(1000, TRUE);//第二个参数TRUE将线程变成可提醒状态 } return 0;}
- 缺点
- 回调函数拿不到bReadBuff里的值。
阅读全文
0 0
- Windows学习(005)--异步IO
- windows io 异步读写
- Windows异步IO
- windows 异步 IO
- Windows异步IO(Asynchronous IO) (一)
- Windows异步IO (Asynchronous IO) (二)
- 异步IO和同步IO概念学习
- c++异步io学习笔记
- Windows异步IO四种方式
- 《Windows核心编程》之“同步IO和异步IO”
- Libevent学习笔记一:异步IO
- python的异步IO模块asyncio学习
- python学习——异步IO
- swoole深入学习 5. AsyncIO 异步IO
- 高级IO学习总结——异步IO
- 【学习笔记】io多路复用中的poll, 以及异步io。
- 异步IO
- 异步IO
- 新闻客户端案例
- Android判断屏幕锁屏的方法
- 最大开源电子商务平台
- 写在开头
- bzoj 4236: JOIOJI map+乱搞
- Windows学习(005)--异步IO
- zookeeper 学习笔记 平滑升级迁移
- 偶然发现的一篇相见很晚的文章:如何学好游戏编程
- 怎么理解Condition
- Heroku工具
- JAVA02
- java中的重写和重载
- GloVe学习笔记
- The Smallest String Concatenation CodeForces