首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将消息传递给线程

如何将消息传递给线程
EN

Stack Overflow用户
提问于 2011-09-01 05:44:30
回答 3查看 2.6K关注 0票数 2

我需要写一种代理服务器,我的设计有点像这样:1.Socket服务器(使用Windows事件选择模型)。程序有一个监听线程监听网络事件。

  1. 客户端列表(当前按socketid_list编制索引)。3.套接字服务器接受新的连接,然后为每个客户端创建新的线程。新线程创建到终端目标服务器的套接字连接(需要持久连接)。

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

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

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

有没有人有什么好主意?

我能不能只有客户端套接字id和目标服务器套接字id的映射。

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

此后,当从客户端获得新的消息时,在map中查找dest服务器,并将消息发送到所需的服务器套接字。

实际上,我需要让它成为多线程的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-01 05:49:10

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-09-01 05:57:02

我将假设每个客户端都需要相同的处理。所以你所需要的就是一堆工作线程。获取连接。拾取相关数据(互斥)。进程。发出回应。

那么为什么每个客户端都有一个线程呢?在需要的时候构造一个工作线程。这似乎是一个更简单的解决方案。

票数 1
EN

Stack Overflow用户

发布于 2011-09-01 05:56:26

从本质上讲,每个线程都需要一个消息队列。然后,您可以将传入的数据发送到此队列,线程可以依次处理它。

有很多方法可以实现这样的队列。例如,您可以使用Windows消息队列,并将Windows消息发送到目标线程拥有的窗口。或者,您可以使用自定义线程安全消息队列来传递数据,并使用互斥锁保护数据结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7263828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档