You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GetQueuedCompletionStatus 如何识别完成端口就绪任务的读写类型

完成端口就绪任务读写类型判断方案

GetQueuedCompletionStatus 本身的返回参数不直接携带IO操作类型标识,需要通过自定义扩展重叠结构的方式实现判断,具体实现逻辑如下:

  • 第一步:定义扩展重叠结构,内置操作类型标识
    标准OVERLAPPED结构仅用来存储系统IO相关的状态,我们需要在其基础上扩展自定义字段记录操作类型,注意必须把OVERLAPPED放在结构的第一个位置,保证指针转换的兼容性,示例代码如下:
// 定义IO操作类型枚举
typedef enum {
    IO_OP_READ,
    IO_OP_WRITE,
    IO_OP_UNKNOWN
} IoOpType;

// 自定义扩展重叠结构
typedef struct {
    OVERLAPPED  stOverlapped;  // 标准重叠结构必须放在首位
    IoOpType    opType;        // 自定义字段:存储当前IO的操作类型
    // 可按需扩展其他字段:比如关联的套接字句柄、IO缓冲区指针等
} MyOverlapped;
  • 第二步:投递IO请求时提前标记操作类型
    调用WSARecv/ReadFile投递读请求、或者调用WSASend/WriteFile投递写请求前,先初始化MyOverlapped实例,把opType对应设置为IO_OP_READ或者IO_OP_WRITE,再把&stOverlapped的地址传给IO投递函数的重叠结构参数。
  • 第三步:取出就绪任务时读取标识判断类型
    调用GetQueuedCompletionStatus获取到LPOVERLAPPED类型的返回指针后,直接强制转换为MyOverlapped*类型,读取opType字段的值即可判断当前就绪任务是读操作还是写操作。

内容的提问来源于stack exchange,提问作者Optimus1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 15:21:01