Winapi 如何区分IOCP处理线程中完成的操作?

Winapi 如何区分IOCP处理线程中完成的操作?,winapi,winsock,iocp,Winapi,Winsock,Iocp,我的应用程序可以使用WSASend和WSARecv从客户端同时发送和接收数据。那么,如何区分IOCP处理线程中完成的操作(发送或接收) 我想我可以使用重叠结构来达到这个目的,但我不能。有什么想法吗 谢谢大家! 解决方案非常简单: struct iOverlaped : public OVERLAPPED{ enum Type { Send, Receive }; iOverlaped(Type type_ ) { ZeroM

我的应用程序可以使用WSASend和WSARecv从客户端同时发送和接收数据。那么,如何区分IOCP处理线程中完成的操作(发送或接收)

我想我可以使用重叠结构来达到这个目的,但我不能。有什么想法吗


谢谢大家!

解决方案非常简单:

struct iOverlaped : public OVERLAPPED{
    enum Type {
        Send,
        Receive
    };
    iOverlaped(Type type_ ) {
        ZeroMemory(this, sizeof(iOverlaped));
        type = type_;
    }

    Type type;
};

对于每个连接,我们必须创建两个重叠实例(每个操作类型一个).

实际上,您必须为每个操作创建一个同时活动的重叠实例。因此,如果您只从写入完成中发出读取,而从读取完成中发出写入,那么您只需要一个。如果可以同时执行多个读写操作,则需要为每个可以活动的读写操作使用一个重叠结构。关键的一点是,重叠结构是“每个操作”的数据,在操作期间持续,并且对于每个活动操作都必须是唯一的。
struct iOverlaped : public OVERLAPPED{
    enum Type {
        Send,
        Receive
    };
    iOverlaped(Type type_ ) {
        ZeroMemory(this, sizeof(iOverlaped));
        type = type_;
    }

    Type type;
};