我目前正在重构一个中型软件项目。它包含一个由多个线程使用的中央内核类。目前,此类使用 aGlib::Dispatcher
来处理由多个线程发出的信号。由于重构过程的一个目标是完全摆脱glibmm
(因为Qt
将用作新框架),我试图找出一种如何使用Boost
. 我已经研究过Boost.Signals
and Boost.Signals2
,但是这些库似乎都没有提供调度程序的替代方案。
为了阐明调度员应该做什么,这里有一个来自官方文档的简短描述:
Glib::Dispatcher 的工作方式类似于 sigc::signal。但与普通信号不同的是,通知是通过管道异步发生的。这是在线程之间进行通信的一种简单而有效的方式,在具有单个 GUI 线程的线程模型中特别有用。
除了操作系统的内部 I/O 锁定之外,不涉及互斥锁。这意味着一些使用规则:
- 只有一个线程可以连接到信号并接收通知,但即使没有锁定也允许多个发送者。
- GLib 主循环必须在接收线程中运行(这通常是 GUI 线程)。
- Dispatcher 对象必须由接收线程实例化。
- 如果您想避免额外的锁定,则应在创建任何发送者线程之前实例化 Dispatcher 对象。
- Dispatcher 对象必须由接收线程删除。
- 由同一接收线程实例化的所有 Dispatcher 对象必须使用相同的主上下文。
你能给我一些正确方向的指示吗?Boost.Signals
这是我可以使用或实现的功能Boost.Signals2
吗?
编辑:正如评论者正确指出的那样,使用Qt
可能是一种选择。但是,我正在重构的类是非常低级的,我不想添加这个额外的依赖项。