WSAAsyncs从另一个线程选择并发送 我用C++和Winsock创建了一个TCP客户端。 我创建了一个只处理消息的窗口,该窗口将处理WM_套接字消息,我使用WSAAsyncSelect注册了该消息

WSAAsyncs从另一个线程选择并发送 我用C++和Winsock创建了一个TCP客户端。 我创建了一个只处理消息的窗口,该窗口将处理WM_套接字消息,我使用WSAAsyncSelect注册了该消息,c++,multithreading,visual-studio-2017,winsock,wsaasyncselect,C++,Multithreading,Visual Studio 2017,Winsock,Wsaasyncselect,我的问题是:我需要从另一个线程(我应用程序的GUI线程)发送数据,我可以安全地从该线程调用“发送”函数吗?或者我是否需要使用一些锁定接口(互斥体)来发送数据?从接收线程的不同线程发送数据应该没有问题 对于数据报套接字,您甚至可以让多个线程同时发送(消息将交错但不混合) 对于包含TCP的流套接字,多个同步发送方可能会混合数据,因此建议一次只发送一个线程。但即使只有一个发送线程限制,也不必与接收线程相同。非常感谢!如果我理解正确,我可以同时发送和接收数据,但我不能让多个线程同时发送,对吗?(当然是流

我的问题是:我需要从另一个线程(我应用程序的GUI线程)发送数据,我可以安全地从该线程调用“发送”函数吗?或者我是否需要使用一些锁定接口(互斥体)来发送数据?

从接收线程的不同线程发送数据应该没有问题

对于数据报套接字,您甚至可以让多个线程同时发送(消息将交错但不混合)


对于包含TCP的流套接字,多个同步发送方可能会混合数据,因此建议一次只发送一个线程。但即使只有一个发送线程限制,也不必与接收线程相同。

非常感谢!如果我理解正确,我可以同时发送和接收数据,但我不能让多个线程同时发送,对吗?(当然是流套接字)@winapiwrapper:是的,就是这样。如果有多个线程要发送,它们应该使用互斥或关键部分,以确保在开始传输下一个数据块之前,一个数据块已完全传输(至少传输到网络缓冲区,以便在流中有一个固定的字节分配范围)。但发送可以自由重叠接收。