当前位置:  开发笔记 > 编程语言 > 正文

我应该选择哪个C++信号/插槽库?

如何解决《我应该选择哪个C++信号/插槽库?》经验,为你挑选了4个好方法。

我想在不使用QT的项目中使用信号/插槽库.我有很基本的要求:

    使用任意数量的参数连接两个函数.

    信号可以连接到多个插槽.

    手动断开信号/插槽连接.

    不俗的性能 - 应用程序是基于帧的(即不是基于事件的),我想用在每帧中的连接.

我已经阅读了libsigc ++和Boost.Signals之间的比较.我还读到Boost.Signals的性能不佳.但是,我知道还有其他库,我仍然不确定应该选择哪个库.

有信号/插槽库的建议吗?



1> Klaim..:

首先,尝试使用boost :: signal.在您尝试应用特定情况之前,不要认为它不够快

如果效率不高,FastDelegate可能会满足您的需求吗?(我没试过,但听说在某些情况下这是一个很好的解决方案,其中boost :: signal似乎不适合).

无论如何,如果在你的应用程序中每帧都使用信号,那么用一些更简单的东西替换信号系统可能是值得的,就像一个容纳对象/仿函数的容器,每个帧都会被调用.信号更多地允许立即"事件"管理,而不是使循环周期动态化(允许改变称为每个帧的函数).(我有自己的解决方案(更新:它现在非常陈旧和古老),我在游戏中大量使用,例如我对性能没有任何问题,所以也许类似的东西可以帮助).



2> Dustin Getz..:

Gamedev.net表单上非常非常快速的事件库

在分析我最近一直在研究的一些代码时,我很惊讶并且看到boost :: signals函数浮动到顶部时感到沮丧.对于那些你们谁不知道,提振::信号是一个奇妙的有用信号/插槽库,可以一起推动使用::绑定为基于委托的事件处理,如人们看到的C#.它功能强大,功能强大且灵活.据我所知,这也令人难以置信,非常缓慢.对于很多使用boost :: signals的人来说这很好,因为他们很少调用事件.我每个对象每帧调用几个事件,结果可预测.

所以我写了自己的.略微不那么灵活和功能强大.它针对每个人实际使用事件的方式进行了优化.事件调用比boost :: signals快15到80倍.

看到链接


这是未来观众的固定链接.http://www.gamedev.net/topic/456646-very-very-fast-event-library/

3> Catskul..:

你所列出的两个是我所知道的唯一两个价值.我所看到的一切都表明libsigc ++在性能方面表现最佳.正如您在比较中看到的那样,有些情况下boost的语法更漂亮,但只是一点点.

我个人使用了libsigc ++并对它很满意.Libsigc ++似乎被更多的项目所使用.快速查看我的包管理器列出了100多个依赖于libsigc ++ 2的项目.仅仅这一点就足以倾斜平衡,特别是考虑到性能优势和缺乏其他显着差异.

我说libsigc ++ 2.



4> fionbio..:

最近继承了一个connect为我们的项目目标产生过多开销的项目.分析显示在信号中使用了互斥,考虑到我们的信号使用,这是不需要的.根据文档成功替换为虚拟互斥锁.互斥体"速度极慢",所以一定要你需要它.这可能对其他人略读这篇文章很有用.

原版的 typedef boost::signals2::signal_type::type signal_type;

typedef boost::signals2::signal_type >::type signal_type;

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有