overlapped模型

int main()

{

BOOL rc;

HANDLE hFile;

DWORD numread;

OVERLAPPED overlap;

char buf[512];

char szPath=”x://xxxx/xxxx”;

//检查系统,确定是否支持overlapped,(NT以上操作系统支持OVERLAPPED)

CheckOsVersion();

// 以overlapped的方式打开文件

hFile = CreateFile( szPath,

GENERIC_READ,

FILE_SHARE_READ|FILE_SHARE_WRITE,

NULL,

OPEN_EXISTING,

FILE_FLAG_OVERLAPPED,

NULL

);

// OVERLAPPED结构实始化为0

memset(&overlap, 0, sizeof(overlap));

//指定文件位置是1500;

overlap.Offset = 1500;


rc = ReadFile(hFile,buf,300,&numread,&overlap);

//因为是overlapped操作,ReadFile会将读文件请求放入读队列之后立即返回(false),

//而不会等到文件读完才返回(true)

if (rc)

{

//文件真是被读完了,rc为true

// 或当数据被放入cache中,或操作系统认为它可以很快速地取得数据,rc为true

}

else

{ 

if (GetLastError() == ERROR_IO_PENDING)

{//当错误是ERROR_IO_PENDING,那意味着读文件的操作还在进行中

//等候,直到文件读完

WaitForSingleObject(hFile, INFINITE);

rc = GetOverlappedResult(hFile,&overlap,&numread,FALSE);

//上面二条语句完成的功能与下面一条语句的功能等价:

// GetOverlappedResult(hFile,&overlap,&numread,TRUE);

}

else

{

//出错了

}

}

CloseHandle(hFile);

return EXIT_SUCCESS;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值