• 完成端口


    // 03 完成端口.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <windows.h>
    
    
    typedef struct _MYOVERLAPPED
    {
        OVERLAPPED  sysOver;
    
    
        char* buf;
    }MYOVERLAPPED, *PMYOVERLAPPED;
    
    
    DWORD WINAPI  TheadProc(LPVOID  Param)
    {
        HANDLE  hIoPort = HANDLE(Param);
        DWORD   dwSize = 0;
        DWORD   dwKey = 0;
        PMYOVERLAPPED pOver = NULL;
        while (true)
        {
            DWORD Result = GetQueuedCompletionStatus(
                hIoPort,    //等待通知的完成端口
                &dwSize, //传输数据的大小
                &dwKey,  //完成键
                (LPOVERLAPPED*)&pOver,
                -1
                );
            pOver->buf;
        }
    
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        //1 创建一个异步IO的文件
        HANDLE hFile = CreateFile(
            L"D:\1.exe",            //文件路径
            GENERIC_READ | GENERIC_WRITE, //操作权限
            0,                                                        //共享方式
            NULL,                                                 //安全属性
            OPEN_EXISTING,                               //打开方式
            FILE_FLAG_OVERLAPPED,                 //最重要的!!!!已异步的方式打开一个文件
            NULL                                                   //没用
            );
        //2 创建一个完成端口
        SYSTEM_INFO  si;
        GetSystemInfo(&si);
        HANDLE hIoPort =
            CreateIoCompletionPort(INVALID_HANDLE_VALUE, 0, 0, si.dwNumberOfProcessors);
    
    
        //3 将完成端口与异步IO设备绑定
        CreateIoCompletionPort(hFile, hIoPort, 0, 0);
    
        //4 创建在完成端口上运行的线程
        for (int i = 0; i < si.dwNumberOfProcessors * 2;i++)
        {
            CreateThread(NULL, 0, TheadProc, (HANDLE)hIoPort, NULL, NULL);
        }
    
    
        //5 产生一个异步IO操作
    
        PMYOVERLAPPED pOver = new MYOVERLAPPED;
        memset(pOver, 0, sizeof(MYOVERLAPPED));
        DWORD dwSize = GetFileSize(hFile, NULL);                        //获取文件大小
        DWORD dwRubbish = 0;
        char* pbuf = new char[dwSize];
        pOver->buf = pbuf;
    
        ReadFile(hFile, pbuf, dwSize, &dwRubbish, (LPOVERLAPPED)pOver);
    
    
    
        system("pause");
    
    
    
        return 0;
    }
  • 相关阅读:
    面向对象-对象的内存图
    面向对象-类与对象的关系
    部署Ambari Server实战案例
    面向对象介绍
    基础语法-二维数组的基本使用
    基础语法-无序/有序数组中元素的查找
    常见数据结构与算法-冒泡排序
    常见数据结构与算法-选择排序
    基础语法-数组的常见问题及常见操作
    基础语法-数组的内存分配
  • 原文地址:https://www.cnblogs.com/Alyoyojie/p/5317264.html
Copyright © 2020-2023  润新知