c++ - 多线程C++应用中的插件/模块通信方法

标签 c++ multithreading

我正在设计一个 C++ 应用程序,它由大量独立的插件或模块组成,这些插件或模块不时产生对其他插件有用的结果。例如,分析模块遇到一些有用的数据并将其发送给操作模块。每个模块将在自己的线程中运行;这样一来,分析模块可以继续收集数据,而操作模块则以它们可以处理的速度处理数据。

我正在寻找合适的消息传递架构/设计模式。 This stackoverflow thread给出了一些建议,但我不确定普通接口(interface)是否可以在多线程环境中工作。

我正在考虑拥有某种基于 channel 的架构,其中每个模块在 channel 上广播一些内容,并且无论哪个模块对其感兴趣 - 都会收听。如果在自由许可下有一些现成的库,那就更好了。

最佳答案

我一直在使用 ACE(自适应通信环境)进行线程管理、TCP/UDP 通信、互斥关系和编程。

ACE 是平台核心模式调用的高度可移植集合。最重要的是,它是免费的、开源的,并且目前正在积极开发中。

http://www.cs.wustl.edu/~schmidt/ACE.html

对于您的应用程序,我建议专门查看“ACE_Task_Base”类以提供多线程,以及“ACE_Reactor”类以注册您的异步回调架构的所有处理程序。

关于c++ - 多线程C++应用中的插件/模块通信方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14004213/

相关文章:

c# - SynchronizationContext.CreateCopy 的目的

python - 使用线程提高脚本的速度

java - Swig C++ 到 Java UnsatisfiedLinkError

ios - 防止iOS时钟停止

java - Spring:使用 ThreadPoolTask​​Executor 创建真正可扩展的线程池

Python:线程管理其他线程通知的事件

c++ - 从文本文件中读取,然后在程序中使用输入

c++ - 一个类如何知道谁调用了它的方法?

c++ - winsock 总是在套接字上返回 -1

c++ - 如何为泛型 std::function 的参数声明 "basic"类型