c++ - WSAAsync从另一个线程选择并发送

标签 c++ multithreading visual-studio-2017 winsock wsaasyncselect

我正在使用 C++ 和 Winsock 创建 TCP 客户端。 我创建了一个仅包含消息的窗口,它将处理 WM_SOCKET 消息,我使用 WSAAsyncSelect 注册了该消息。

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

最佳答案

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

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

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

关于c++ - WSAAsync从另一个线程选择并发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49310260/

相关文章:

c++ - 有效地收集/分散任务

java - java中String变量的并发访问

.net - 在可用目标列表中看不到 .netStandard

c++ - 将 Matrix 作为指向函数的指针传递

c++ - 常量引用优于非常量引用的性能

c++ - `std::greater` 或 `std::less_equal` 的类型是什么

c++ - 如何使用 C++ 将所有类的执行时间添加到单个文本文件中?

Java(Java声音): Is "clip.play()" an expensive call?

visual-studio - 为什么我在 VS 2017 中没有 F# 语法颜色的设置?

javascript - Typescript 生成 typescript 而不是 javascript