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