c++ - 如何向线程传递消息

标签 c++ multithreading

我需要编写一种代理服务器,我的设计有点像这样: 1. Socket服务器(使用Windows事件选择模型)。程序有一个监听器线程监听网络事件。
2. 客户端列表(当前由socketid 索引)。 3.套接字服务器接受一个新连接,然后为每个客户端创建一个新线程。新线程创建到最终目标服务器的套接字连接(需要持久连接)。

我已经编写了套接字服务器并且工作正常。我的问题是,当新消息从客户端传入时,如何将此消息传递到相关线程(以便消息可以发送到目标服务器)。

在我的服务器中,我从客户端消息中获取最终目标服务器的地址。我可以从客户端套接字列表中查找客户端套接字。但是我如何将消息发送到正确的线程呢?

在我迄今为止使用的线程中,线程函数只是运行一个循环。我是否调用线程函数,将消息作为参数传递给它?

有人对如何做到这一点有什么好主意吗?

我不能只拥有客户端套接字 ID 和目标服务器套接字 ID 的映射吗?

在客户端套接字上接受后,连接到目标服务器并发送消息。将目标服务器套接字 ID 保存到 map 中。

此后,当从客户端获取新消息时,在映射中查找目标服务器并将消息发送到必要的服务器套接字。

实际上,我需要将其设为多线程吗?

最佳答案

使用消息传递或同步原语,例如队列、邮箱、事件信号等。

例如,如果每个线程都有一个用于发送数据的队列,您只需写入该队列即可。队列必须是线程安全的才能允许并发访问。

关于c++ - 如何向线程传递消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7263828/

相关文章:

sql - .NET - 如何将 BackgroundWorker 与 CMD.executenonquery 一起使用

silverlight - Silverlight后台Worker如何毫无问题地更新UI线程?

c++ - 向数组添加维度

c++ - std::string 引用、std::regex 和 boost::filesystem 的基本概念

c++ - 在 C++ 中的无序映射中访问列表的元素

c++ - 只有默认参数有效

c++ - 为什么这个随机数生成器不是线程安全的?

c# - 使用 UDP 接收时安全地结束线程

java - 重现线程干扰

c++ - 实现 TreeModel 时的 Gtk::TreeModel::iterator 用法