异步机制 - BindIoCompletionCallback
直接上代码
VOID CALLBACK test_io_completion_routine(
DWORD dwErrorCode,
DWORD dwNumberOfBytesTransfered,
LPOVERLAPPED lpOverlapped
)
{
printf("dwErrorCode %d, dwNumberOfBytesTransfered %d\n", dwErrorCode, dwNumberOfBytesTransfered);
printf("%s\n", (char*)(lpOverlapped + 1));
free(lpOverlapped);
}
BOOL
queue_read_req(
HANDLE hFile,
DWORD nNumberOfBytesToRead,
DWORD Offset)
{
BOOL bResult = FALSE;
OVERLAPPED* olv = (OVERLAPPED* )malloc(sizeof(OVERLAPPED) + nNumberOfBytesToRead);
if(olv)
{
DWORD nBytesRead = 0;
ZeroMemory(olv, sizeof(OVERLAPPED) + nNumberOfBytesToRead);
olv->Offset = Offset;
bResult = ReadFile(hFile, (void*)(olv + 1), nNumberOfBytesToRead, &nBytesRead, olv) ;
if (!bResult)
{
DWORD dwError = 0;
switch (dwError = GetLastError())
{
case ERROR_HANDLE_EOF:
free(olv);
break;
case ERROR_IO_PENDING:
break;
default:
break;
}
}
}
return bResult;
}
void test_io_port()
{
LPCWSTR FileTest = L"C:\\NTDLL.txt";
HANDLE hFile = CreateFileW(FileTest, // file to open
GENERIC_READ, // open for reading
FILE_SHARE_READ, // share for reading
NULL, // default security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // normal file
NULL); // no attr. template
if(hFile != INVALID_HANDLE_VALUE)
{
BindIoCompletionCallback(hFile, test_io_completion_routine, 0);
for(int i = 0; i < 5; i++)
{
queue_read_req(hFile, 1024, i*1024 );
}
Sleep(5000);
CloseHandle(hFile);
}
}
最新文章
- PHP 删除目录及目录下文件
- Yii2 高级版新建一个 Api 应用
- 关于Cookie和Session的优缺点
- Spring框架学习(二)
- js练习-控制div属性
- 编译并使用Lua语言
- 如何从 Xcode 控制台输出 JavaScript 的 log?
- 获取Pid
- 简单易学的SSM(Spring+SpringMVC+MyBatis)整合
- linux 下oracle 11g静默安装(完整版)
- Linux:日期用法,及格式定义
- (一) sublime安装和使用
- 【Android】webview javascript 注入方法
- 前端 ------ 03 body标签中的相关标签
- Windows&;Word 常用快捷键
- jquery submit ie6下失效的原因分析及解决方法
- Starting MySQL...The server quit without updating PID file [失败]local/mysql/data/localhost.localdomain.pid报错
- laravel model relationship
- PC和FPGA间的串口通信实现
- jsp button提交表单
热门文章
- MySQL的数据读取过程
- c# 引用与对象举例
- 12_Azkaban案例实践5_Command操作Hive脚本任务
- U盘装manjaro 18报Python error in job “initcpio”
- springboot集成Apollo分布式配置
- webSocket的场景应用
- D. Lakes in Berland (DFS或者BFS +连通块
- JVM之Java运行时数据区(线程隔离区)
- Python跨文件全局变量的使用
- FFmpeg常用命令学习笔记(六)图片与视频互转命令