C++ 最快的C&x2B+;无依赖性的信号/插槽库

C++ 最快的C&x2B+;无依赖性的信号/插槽库,c++,signals,signals-slots,C++,Signals,Signals Slots,我将使用信号和插槽向上/向下传递5-10层对象的数据。这将导致每秒几千个信号。这与“我点击了一个按钮”相去甚远。我所有的物体也会每隔100毫秒用定时器给它们发一个信号,这样它们就可以做一些处理了 什么是最快的C++信号/时隙实现,它将很小,不需要其他库,如Boost。(我需要保持二进制文件的总大小非常小) 我见过libSigC++、sigSlot、Cpp事件,信号库的设计通常是为了便于使用,而不是为了提高性能。在追求快速执行时,您可以检查这一点,这可能会有所帮助 在你的情况下,我会开始尝试更简单

我将使用信号和插槽向上/向下传递5-10层对象的数据。这将导致每秒几千个信号。这与“我点击了一个按钮”相去甚远。我所有的物体也会每隔100毫秒用定时器给它们发一个信号,这样它们就可以做一些处理了

<>什么是最快的C++信号/时隙实现,它将很小,不需要其他库,如Boost。(我需要保持二进制文件的总大小非常小)


我见过libSigC++、sigSlot、Cpp事件,

信号库的设计通常是为了便于使用,而不是为了提高性能。在追求快速执行时,您可以检查这一点,这可能会有所帮助


在你的情况下,我会开始尝试更简单的方法,比如sigslot。但在这种情况下我不会使用信号库。。。可能是某种消息队列,带有某种时间戳。

即使是最复杂、功能最丰富的信号/插槽库也相当轻量级。在大多数情况下,信号发出的速度与虚拟函数调用相当。对于boost::signals和libsigc++等模板驱动库,基本上可以获得与传递函数指针相同的性能。

pbhogan的signals如何:


它的速度非常快(使用Don Clugston编写的代码,Ismael也提到了这一点),而且非常容易使用。我已经使用它一段时间了,没有任何问题。

我的一个重要问题是:它必须是线程安全的吗?调用信号只会在非线程安全的库中很快。我也不会完全忽略连接/断开连接,有些库的连接/断开连接操作非常昂贵。我不确定这是否重要,但这个实现不是线程安全的。@Eric-没错,要制作一个线程安全的版本,需要花费更多的工作,而且它可能会执行得很糟糕。我不确定我是否理解你的意思。如果需要更多的工作来保证线程安全,那么它就不是线程安全的。。。。我从来没有说过不能保证线程安全。我从你的帖子中注意到了这个库,当我看到它时,我对讨厌的模板和刻薄的委托类感到非常气馁。看起来有很多巫毒在围绕着有缺陷的编译器展开工作,以实现两行ASM。我会玩它看看,但这对我来说简直是一场噩梦。@Eric很抱歉不清楚,我同意你的观点,这个库肯定不是线程安全的。如果你需要一个线程安全的信号库,那么我想这个不是为你准备的。我在一个生产产品上使用了这个,我从来没有遇到过任何问题。我同意这有点恶心,我预计会有很多问题,但进展非常顺利。事实是,它太快了。为了达到这个速度,你牺牲了一些东西(也就是说,它在语法上并不完美)。问题是,OP从来不需要线程安全库,所以这是一个有效的答案。@Eric-boost signals2是一个完全线程安全的信号/插槽系统,我也使用过。这非常棒,但它的效率不如最小的FastDelegate方法。