问题标签 [boost-signals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 带有 boost:function 定义的 boost:signals 映射
我正在尝试创建一个简单的管理器,它将错误代码映射到函数。但是由于地图复制了值并且信号是不可复制的,所以这不是解决方案。我不能使用 shared_ptr 指针映射,因为 * 运算符在 boost::function 中被阻止。
我应该使用哪个集合来存储它?
boost - Windows XP 中的 Firebreath 插件注册问题
我正在使用 firebreath 在 windows xp 中使用 Visual Studio 2010 开发浏览器插件。该插件使用升压信号、文件系统和系统、libcurl 库。
该插件成功构建,但在使用 regsvr32 注册时出错:
检查了一段时间后,我发现如果我删除升压信号模块,插件就会被注册。我检查了依赖walker中的插件dll,但没有丢失的dll。虽然它在 ADVAPI32.DLL 和 MPR.DLL 中显示了模块警告。谁能帮我解决这个问题,因为我无法从我的项目中删除信号模块?
signals-slots - 将皮下注射与 Boost.Signals2 结合使用
为了将 Boost.Signals2 与 Hypodermic 一起使用,我将如何连接插槽?我会将连接代码放在 OnActivating 块中吗?
即使 Hypodermic 是用 Signals2 构建的,我是否认为它们并没有重复彼此的功能?
c++ - 升压信号 - 作为参数传递的类型
我发现了这个使用升压信号的 C++ 代码,我正在尝试理解它。
我不知道SelArity
函子会返回什么。据我了解m_signal
是一种可以声明信号的类型,该信号将能够连接到带有Signature
签名的函数。怎么可能有类型作为参数?(见return BaseType::m_signal( arg );
)什么是代表的类型ResultType
?我将如何使用SelArity
仿函数返回的对象?
c++ - c ++ Netbeans 7.2.1正确链接boost库
我最近从 Visual Studio 2010 Express 切换到使用 NetBeans,我已经对布局和简单性印象深刻,尽管它确实需要一点点推动才能正确编译。但是,我还有另一个问题。当我测试 boost 是否也能正常工作时,我将文件 boost/signals.hpp 包含在 main.cpp 中,然后转到项目选项中的其他库目录并添加我的 boost 安装的 lib 目录,与我会在视觉工作室做。毕竟,我还是得到了一堆未定义的引用。
我正在使用带有 msys 的 mingw 编译器,如果这有什么不同的话,我有 boost 1.47 版。我可以确认,在使用 Visual Studio 时,同样的 boost 安装工作正常。
这是构建日志。
编辑:
尝试通过项目属性中的添加库对话框手动添加所需的 lib 文件后,我收到此错误。
c++ - boost::signals 插槽是同步调用还是异步调用?
谁能告诉我boost::signals
插槽是同步调用还是异步调用?
例如我有这段代码:
执行线程是如何工作的?执行是等待Hello()
并World()
执行,然后"Foo"
打印出来还是异步调用它们(打印“Foo”并以未定义的顺序调用Hello()
和World()
执行)?
c++ - Boost::signals2 - 用槽解构对象
考虑一下:
输出是“插槽调用!” 并且没有崩溃或任何事情。这就是为什么我有几个问题:
1)为什么没有崩溃?
2)为什么即使槽函数将某些东西分配给不存在的对象,也没有崩溃?
3)如何使信号自动跟踪其插槽的生命周期?我的意思是当插槽被破坏时,它会断开连接。
第 3 个问题是最重要的,因为我需要实现观察者模式,并且观察者(插槽)的生命周期通常不会是静态的(在应用程序运行的整个时间内)。
c++ - 在析构函数期间提升信号导致 sigabrt
我开始使用 boost::signals2 跟踪对象破坏。我写了一个小测试,看看我是否仍然可以在析构函数中使用信号。它似乎奏效了。然后我开始使用它来跟踪引用其他对象的对象列表。我的结构或多或少是这样的:
结构简图:http: //oi50.tinypic.com/16c8cwn.jpg
我有两个类 IModel 和 IBlock。IModel 有许多 IBlock,一个 IBlock 有一个 IModel 父级。但是,有一个特殊的 IBlock,称为 IModelBlock。除了其父模块外,此模块还有一个引用的 IModel。这是 IModel 之间的“连接器”。我想让 IModel 知道哪些 IModel 正在使用它们,所以我实现了一个引用计数系统,该系统使用在 IModel 和 IBlock 销毁期间发生的信号来跟踪哪些模型正在使用另一个模型。
我有我的 IBlock 纯虚拟类(显然除了析构函数):
我的 IModelBlock 标头(纯虚拟类):
我的 IModel 标头(纯虚拟类):
我对 IModelBlock 构造函数(ModelBlock 类)的实现,它通知模型它正在被使用:
这是毛茸茸的地方
我的 IModel (Model) 实现定义了以下内容:
这是发生的事情
当我使用 ModelBlocks 创建一堆带有嵌套模型的模型时,每件事都工作得很好。然而,我预料到破坏会出现一些问题,所以我为一个巨大的段错误做好了准备……这从未发生过。相反,当我让所有模型(及其所有块)开始销毁阶段时,我得到了一个 sigabrt,它说它发生在Model::onModelBlockDestroying
第一个if
. 我看着控制台,它说pure virtual method called
。我以前从未见过这个错误,所以我不确定如何修复它。
堆栈跟踪显示它正在调用 ~IBlock 析构函数并发出sigBlockDestroying
信号,在 10 个函数级别后最终调用该onModelBlockDestroying
函数。现在,如果模型被销毁,它的所有信号都应该被断开(参见~Model
参考资料),我会认为 sigBlockDestroying 不会调用任何东西。因此,我可以得出结论,当调用 ~IBlock 析构函数时,模型仍然存在,并且对象仍然有效。我 99.9% 肯定我在这个假设中是错误的,因为显然存在问题,但我不确定它为什么会发生或如何解决它。我知道上面有很多代码,但是有人知道我哪里出错了吗?
编辑:我感觉它与调用传入的 IBlock* 的成员函数有关onModelBlockDestroying
,但该对象还没有消失(除非,因为它已经通过析构函数进行实际实现,它只剩下用纯虚来调用)。这就是正在发生的事情吗?因为析构函数在 ~IBlock 中,当它在树下很远时,它已经调用了 ~ModelBlock 的析构函数,所以所有实现的函数都不再可访问?
如果我解释得不够好,请告诉我,我会澄清。
c++ - 这是使用升压信号的正确和适当的方式吗?
我正在创建一个 MVC 应用程序,并且我希望模型能够将输出文本发送到要显示的 GUI。
一些人推荐了函数指针,但我现在了解到,如果你传递一个成员函数的函数指针,你还必须传递一个指向对象的指针(为什么不只传递对象指针以便可以在其上调用方法呢? )
无论如何,我也被推荐使用 boost::signals2。我已经实现了一个非常简单的工作示例。我基本上将信号绑定到 GUI 对象的函数。然后将指向信号的指针传递给可以触发信号的对象。请参阅下面的代码...
由于我是信号的初学者,我不完全确定我是否按照它们的预期使用它们。
c++ - 如何传递信号回调(使用 boost::bind)
我正在编写一个包装器boost::signals2::signal
以获得更清洁、更易于使用的界面。这是我想出的:
我不确定这是我能想到的最好的包装界面,并且让SomethingHappened成为公共成员可能会有一些缺点。虽然我不介意听听你对此的看法,但这不是这个问题的意义所在。
我想知道如何将回调传递给+=
操作员。正如我在ClassThatListensForEvents
函数回调中所写的那样,没有问题,但是使用结果bind
会产生大量难以阅读的模板编译器错误。