问题标签 [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.

0 投票
4 回答
1436 浏览

c++ - Boost::signal 内存访问错误

我正在尝试使用 boost::signal 来实现回调机制,并且我在 boost::signal 代码中获得了一个内存访问断言,即使是库的最琐碎的使用。我已将其简化为以下代码:

谢谢!

编辑:这是使用带有 SP1 的 Visual Studio 2008 编译的 Boost 1.36.0。Boost::filesystem,就像 boost::signal 一样,也有一个必须链接的库,它似乎工作正常。我相信,我使用的所有其他 boost 库都只有标头。

0 投票
2 回答
5573 浏览

delegates - 如何在 C++/CLI 中使用 boost::bind 绑定托管类的成员

我在本机 C++ 类中使用 boost::signal,现在我正在 C++/CLI 中编写一个 .NET 包装器,以便我可以将本机 C++ 回调公开为 .NET 事件。当我尝试使用 boost::bind 获取托管类的成员函数的地址时,我收到编译器错误 3374,说除非我创建委托实例,否则我无法获取成员函数的地址。有谁知道如何使用 boost::bind 绑定托管类的成员函数?

为澄清起见,以下示例代码会导致编译器错误 3374:

0 投票
4 回答
923 浏览

c++ - 公共提升::信号对象

我把我boost::signal的公开,因为我很懒。

...而不是用Button::OnClicked(boost::function<void()>).

这会回来咬我吗?

0 投票
6 回答
2599 浏览

c++ - How to make a copyable boost::signal?

I get why boost::signal is noncopyable (it's because copying a signal doesn't have a clear meaning), but I need a version of it that does provide some sort of copy ctor (either a no-op or one that copies all connections).

The reason I need this is because in my project many objects become noncopyable just by virtue of featuring signals, and to treat them with comfortable value semantics (shared_ptrs are not as comfortable) I need to manually provide copy-ctors, violating DRY. Clearly a sort of quasi-copyable signal would be a good workaround for C++'s ugliness here.

First solution that comes to mind is inheriting signal and providing a copy ctor in the derived class, but that's a no-go because signal doesn't have a virtual dtor.

Thoughts?

0 投票
6 回答
52416 浏览

c++ - 使用 Boost::Signals 进行 C++ 事件的完整示例

我知道 boost.org 上的教程解决了这个问题: Boost.org Signals Tutorial,但是这些示例并不完整,而且有些过于简化。那里的示例没有显示包含文件,并且代码的某些部分有点模糊。

这是我需要的:
ClassA 引发多个事件/信号
ClassB 订阅这些事件(多个类可以订阅)

在我的项目中,我有一个较低级别的消息处理程序类,该类将事件引发到业务类,该业务类对这些消息进行一些处理并通知 UI (wxFrames)。我需要知道这些都是如何连接起来的(什么顺序,谁打电话给谁,等等)。

0 投票
4 回答
15746 浏览

c++ - 我可以使用 Boost Signals2 和 Threads 在 C++ 中创建软件看门狗定时器线程吗?

我目前正在单线程应用程序中从其他人的库中运行函数 Foo 。大多数时候,我打电话给 Foo,它真的很快,有时,我打电话给 Foo,它需要很长时间。我不是一个有耐心的人,如果 Foo 要永远占用,我想停止执行 Foo 并且不使用这些参数调用它。

以受控方式调用 Foo 的最佳方法是什么(我当前的环境是 POSIX/C++),这样我可以在一定秒数后停止执行。我觉得在这里做的正确的事情是创建第二个线程来调用 Foo,而在我的主线程中,我创建了一个计时器函数,如果第二个线程超时,它最终会发出信号。

还有另一种更合适的模型(和解决方案)吗?如果没有,Boost 的 Signals2 库和 Threads 会起作用吗?

0 投票
3 回答
1387 浏览

c++ - 升压信号双倍免费?

我正在尝试调试某种内存访问错误,我认为这是双重免费的。代码太复杂,无法发布,但我可以尝试描述一下。

基本上,我有两个线程。创建工作线程时,它会实例化一个new boost::signal对象,并将其存储在shared_ptr. 然后父进程向线程查询信号,父进程将connect()信号shared_ptr发送给处理函数。

这一切都有效,直到线程完成并尝试清理为止。这是调用堆栈的一个片段,希望有人能看到我错过的东西。

任何意见,将不胜感激。我已经研究了几天,但无法弄清楚问题所在。

0 投票
1 回答
1169 浏览

c++ - 不包括升压信号调用

有一个信号和几个带有插槽的对象。我想实现当一个对象调用信号并阻止它自己的连接时的行为。我想一个小片段会提供更多信息:

问题:

  1. 是否有一些提升东西的标准方法?我要重新发明轮子吗?
  2. 如何使用 TSignal 签名定义 Call 方法?
0 投票
2 回答
1119 浏览

c++ - 在单个 slot_type 上使用多个 boost::connect 的内存泄漏

当我boost::signals尝试将多个信号连接到单个slot_type. 我已经在各种论坛上看到过同样的泄漏报告,但找不到任何提及正确方法或任何解决方法的信息。

我正在尝试做的事情:

我正在尝试将结果传递boost::bind()给函数。在此功能中,我想将多个信号连接到该结果。第一个连接工作正常,但第一个连接之后的每个连接都会泄漏一个句柄。

这是一些示例代码:

现在打电话CallingClass::connectSignals()

我希望调用connectToSlots将 50 个信号连接到一个插槽,然后断开并清理所有这些信号。实际发生的是 1 个信号完全清除,然后其余 49 个信号部分清除,但泄漏了一些内存。

将插槽传递给函数以多次使用的正确方法是什么?任何帮助,将不胜感激。

谢谢,克里斯

0 投票
2 回答
1747 浏览

c++ - Boost: boost::slot<>::~slot 崩溃的原因是什么?

我遇到了这样的崩溃:

这是代码:

这是我第一次使用 Boost,而且我对我试图在这里移植的项目的代码也完全陌生。

这就是为什么我想问一下这种崩溃是否可以由 Boost 以任何方式解释,或者它是否一定与 Boost 无关。

我已经尝试了解崩溃本身,但不知何故被卡住了。似乎将要在此处删除的 std::vector 可能被搞砸了(搞砸 = 内存损坏)。该向量是 slot_base::data_t 的成员。删除是在 slot_base::shared_ptr 的析构函数中完成的。所以也许 shared_ptr 也被搞砸了 - 所以甚至整个 slot_base 都被搞砸了。但是在我拥有的代码中,我真的看不出那个内存可能会被搞砸的原因。这甚至是myslot建成后的第一次访问。

另外:我也不太明白为什么在我进行连接时会在这里调用 ~slot_base()。但我也没有找到连接成员函数。那是某个地方的魔法巨魔吗?