windows io 异步读写
2011-04-27 11:08
260 查看
#include <windows.h> #include <stdio.h> void main() { HANDLE hfile = CreateFile("test.txt",GENERIC_READ | GENERIC_WRITE, 0,NULL,CREATE_ALWAYS, FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_NORMAL,NULL); if (hfile == INVALID_HANDLE_VALUE) { printf("invalid handle value./n"); } OVERLAPPED oWrite = { 0 }; oWrite.Offset = 0; oWrite.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL); WriteFile(hfile, "Jeffery chen", 14, NULL, &oWrite); BYTE bBuffer[10]; OVERLAPPED oRead = { 0 }; oRead.Offset = 5; /**start from 6 char */ oRead.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL); ReadFile(hfile, bBuffer, 10, NULL, &oRead); HANDLE h[2]; h[0] = oRead.hEvent; h[1] = oWrite.hEvent; while (true) { Sleep(3000); DWORD dw = WaitForMultipleObjects(2, h, FALSE, 1000); if(dw == WAIT_OBJECT_0) { printf("can be read./n"); oRead.Offset += 1; // ReadFile(hfile,bBuffer,10,NULL,&oRead); // Handle to an event set to the signaled state when the transfer has been completed //当调用完ReadFile后,会自动设置到有信号状态。 printf("%s/n",bBuffer); } else if (dw == (WAIT_OBJECT_0 + 1)) { printf("can write io./n"); // WriteFile(hfile,"shawn",6,NULL,&oWrite); // Handle to an event set to the signaled state when the transfer has been completed } else break; } getchar(); }
在创建event时,第二个参数表明是否为manual-reset event,此处设为false,表明系统自动管理。
当调用WaitForMultipleObject时使信号处于无信号状态。
当调用ReadFile或WriteFile时使信号处于有信号状态 。
相关文章推荐
- WINDOWS下异步IO
- 在 windows IOCP 中,如何等待异步 IO 操作完成(包括被取消)[转]
- IO三种方式:BIO,NIO,AIO (异步读写asynchronous IO)
- [转帖]异步IO中读写Object
- Windows异步IO
- 网络编程(52)—— Windows下使用WSAEventSelect实现异步通知IO
- Windows IO模型-WSAAsynSelect模型(异步阻塞模型)
- windows 异步 IO
- IO三种方式:BIO,NIO,AIO (异步读写asynchronous IO)
- IO与文件读写---同步/异步与阻塞/非阻塞的区别(转) _适用于TI dsp驱动
- windows 核心编程之 10 同步设备IO与异步设备IO
- windowsViaC/C++设备IO之异步设备IO请求
- WSAAsyncSelect和windows客户端异步IO模型
- Windows学习(005)--异步IO
- Windows Via C/C++ 读书笔记 7 异步IO, 完成端口模式
- Python笔记-IO同步和异步、 读写文件、StringIO和BytesIO
- 使用WinIO库实现保护模式下的IO和内存读写
- IO流-文本IO\读写二进制数据
- C#使用异步实现 IO 操作
- 异步 IO