您的位置:首页 > 其它

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时使信号处于有信号状态 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: