• 异步读写之利用完成历程


    // Overlapped.cpp : 定义控制台应用程序的入口点。

    #include "stdafx.h"
    #include <windows.h>
    #include <iostream>
    using namespace std;
    VOID CALLBACK CompletionRoutine(
    _In_ DWORD ErrorCode,
    _In_ DWORD ReturnLength,
    _Inout_ LPOVERLAPPED Overlapped);
    HANDLE __FileHandle = NULL;
    char __BufferData[20] = {0};


    int main()
    {
    BOOL IsOk = FALSE;
    OVERLAPPED Overlapped = { 0 };
    __FileHandle = CreateFile(L"ReadMe.txt", GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
    if (__FileHandle == INVALID_HANDLE_VALUE)
    {
    int LastError = GetLastError();
    goto Exit;
    }
    //通知IO有异步IO和Overlapped的设置,读四个字节每次
    //不用等待是因为没有创建事件当然不用搞
    //OverLapped这里的作用是利用Overlapped->Offset 往下加字节设置位置读取字节
    IsOk = ReadFileEx(__FileHandle, __BufferData, 4,&Overlapped,
    (LPOVERLAPPED_COMPLETION_ROUTINE)CompletionRoutine);
    if (IsOk == FALSE)
    {
    int LastError = GetLastError();
    if (LastError == ERROR_IO_PENDING)
    {
    }
    }
    Exit:
    SleepEx(0,TRUE);//只有为TRUE时候,等待完成历程返回时退出
    if (__FileHandle != NULL)
    {
    CloseHandle(__FileHandle);
    __FileHandle = NULL;
    }
    printf("Input AnyKey To Exit ");
    getchar();
    return 0;
    }
    VOID CALLBACK CompletionRoutine(
    _In_ DWORD ErrorCode,
    _In_ DWORD ReturnLength,
    _Inout_ LPOVERLAPPED Overlapped
    )
    {
    if (ErrorCode == ERROR_SUCCESS)
    {
    int i = 0;
    for (i = 0; i < ReturnLength; i++)
    {
    printf("%c", __BufferData[i]);
    }

    Overlapped->Offset += ReturnLength;//
    ReadFileEx(__FileHandle, __BufferData, 4, Overlapped,
    (LPOVERLAPPED_COMPLETION_ROUTINE)CompletionRoutine);
    }
    else if (ErrorCode==ERROR_HANDLE_EOF)
    {
    //数据完成
    printf(" ");
    GetFileSize
    }
    else
    {

    }
    }

  • 相关阅读:
    android自定义视图
    CISCO PVST+配置和结果验证 per vlan spanning tree(51cto 实验10)
    读入a,b当a,b不同时为零时结束
    跨交换机VLAN 配置和结果验证(51cto :实验9)
    单交换机VLAN 配置和结果验证(51cto-o8)
    cocos2d(1)
    servlet-session
    Servlet-servletContext
    mysql数据库从windows迁移到linux,或者linux迁移到windows教程
    linux (centos) 安装MySql详细教程!!实战详解
  • 原文地址:https://www.cnblogs.com/L-Sunny/p/8389357.html
Copyright © 2020-2023  润新知