zoukankan      html  css  js  c++  java
  • PostQueuedCompletionStatus 发送自定义 事件 触发 GetQueuedCompletionStatus 的问题解决记录

    首先 这两个函数 有这样的对应关系:
    BOOL WINAPI GetQueuedCompletionStatus(
      _In_   HANDLE CompletionPort,
      _Out_  LPDWORD lpNumberOfBytes,
      _Out_  PULONG_PTR lpCompletionKey,
      _Out_  LPOVERLAPPED *lpOverlapped,
      _In_   DWORD dwMilliseconds
    );
    
    BOOL WINAPI PostQueuedCompletionStatus(
      _In_      HANDLE CompletionPort,
      _In_      DWORD dwNumberOfBytesTransferred,
      _In_      ULONG_PTR dwCompletionKey,
      _In_opt_  LPOVERLAPPED lpOverlapped
    );
    
    
    CompletionPort [in]
    A handle to an I/O completion port to which the I/O completion packet is to be posted.
    
    dwNumberOfBytesTransferred [in]
    The value to be returned through the lpNumberOfBytesTransferredparameter of the GetQueuedCompletionStatus function.
    
    dwCompletionKey [in]
    The value to be returned through the lpCompletionKey parameter of theGetQueuedCompletionStatus function.
    
    lpOverlapped [in, optional]
    The value to be returned through the lpOverlapped parameter of theGetQueuedCompletionStatus function.
     

    此间主要有两个问题没有理清楚:

    1.没有想明白 第三个参数 _In_  ULONG_PTR dwCompletionKey, 可以是自定义的数据类型, 例如int, 我的工程中传值为 iocp_api::Accept(=2), 即简单的 int 数值 值为 2, 那么在

    BOOL WINAPI GetQueuedCompletionStatus(
      _In_   HANDLE CompletionPort,
      _Out_  LPDWORD lpNumberOfBytes,
      _Out_  PULONG_PTR lpCompletionKey,
      _Out_  LPOVERLAPPED *lpOverlapped,
      _In_   DWORD dwMilliseconds
    );
    函数 的 _Out_  PULONG_PTR lpCompletionKey 的值就会是 2, 我的问题出在“进行普通的 GetQueuedCompletionStatus() 处理时, 参数是返回地址指针类型“ , 没有意识到 该指针的值 就是 0x00000002

    2.没有注意到 两个函数的 微妙非堆成区别:
    BOOL WINAPI GetQueuedCompletionStatus( ...,  _Out_  LPOVERLAPPED *lpOverlapped, ... );
    BOOL WINAPI PostQueuedCompletionStatus( ...,  _In_opt_  LPOVERLAPPED lpOverlapped );
    GetQueuedCompletionStatus() 要求的是 LPOVERLAPPED * 
    而 PostQueuedCompletionStatus() 是 LPOVERLAPPED
  • 相关阅读:
    uWSGI, Gunicorn, 啥玩意儿?
    Internet设置->连接选项卡->局域网(LAN)设置 某些设置由系统管理员进行管理
    windows下python2和python3共存
    python3.5之输出HTML实体字符
    python3.5之string
    js获取本周、本月、本季、本年的第一天
    滚动加载图片(懒加载)实现原理
    构造函数模式实现拖拽效果
    图片轮播之面向过程写法
    适用grunt的注意点
  • 原文地址:https://www.cnblogs.com/Wilson-Loo/p/3173392.html
Copyright © 2011-2022 走看看