- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在模型 View 设置中使用 RxCpp。一个 View 更新方法订阅了一个 observable(通过 lambda 捕获 this
)。如果订阅比 View 实例存活时间更长,则会发生未定义的内存访问。我不希望订阅使 View 保持事件状态。因此,我需要订阅在 View 的析构函数上确定性地结束。这听起来像是 RAII 的案例。
这有危险吗?它在某种程度上是对 rx 的滥用吗?我读过更喜欢 take_until
在类似的设置中。为什么这会更好,以及如何在这里使用它?
谢谢!
#include "rxcpp/rx.hpp"
class MyView : public View
{
public:
MyView(rxcpp::observable<int> obs) : obs (obs)
{
sub = obs.subscribe ([this] (int i) { update(i); });
}
~MyView()
{
sub.unsubscribe();
}
void update(int i)
{
number = i;
repaint();
}
private:
rxcpp::observable<int> obs;
rxcpp::subscription sub;
int number;
};
最佳答案
take_until
当下一个 Action 在它之后组合时是最好的答案。这将确保正确的排序。
问题是取消总是一场竞赛。问题中的代码是 unsubscribe()
在析构函数中,然后开始竞争取消。然而,析构函数不会等到订阅结束。这会在析构函数的退出和预期的订阅结束之间产生竞争 this
有效。
解决方案是在 unsubscribe()
之后添加某种等待。 .
这可能是对设置在 finally()
中的原子 bool 值的忙等待。在构造函数中的原始订阅上。
或者使用 mutex
可能需要更长时间的等待。和一个 condition_variable
(使用 finally()
来表示 condition_variable
)。
关于c++ - RxCpp RAII 可观察订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48724201/
如果观察者正在使用 observe_on(rxcpp::observe_on_new_thread()),等待所有观察者 on_completed 被调用的正确方法是什么: 例如: { Foo
我试图在我的程序中包含 RxCpp,我注意到,该框架调用了很多发射对象的复制构造函数。 #include #include class Foo { public: Foo() = defa
我正在学习 C++ 的响应式(Reactive),我正在寻找一些指导。我创建了一个函数来等待事件然后返回它。我想捕获响应式(Reactive)异步发生的所有事件并在它们出现时进行处理。这是我到目前为止
我希望创建一个扩展函数,它不关心它接收到的可观察对象的类型。 例如: template inline auto makeones() -> function(observable)> { retur
我正在尝试找出 C++ 中的调度模型 version处方药。 了解 C# 版本,其中有一个带有一个 Schedule 方法的简单接口(interface); C++ 版本看起来相当复杂,有调度程序、工
我在模型 View 设置中使用 RxCpp。一个 View 更新方法订阅了一个 observable(通过 lambda 捕获 this)。如果订阅比 View 实例存活时间更长,则会发生未定义的内存
考虑一个阻塞函数:this_thread::sleep_for(milliseconds(3000)); 我正在尝试获得以下行为: Trigger Blocking Function
我创建了一个名为 validateImplementation 的自定义 rxcpp 运算符,它应该简单地采用通用可观察流,在 SimpleInterface 上进行一些验证,然后继续或结束基于流在特
我正在尝试学习如何在 rxcpp 中创建自定义运算符,并且我能够创建位于 here 中的运算符.但是,我想了解如何创建更多通用运算符来实现 rxo::operator_base 并使用 lift 运算
我刚开始使用 rxcpp 并尝试在以下情况下将某些功能组合在一起: 我有一个数据源将从一个单独的源检索命令,我正在编写的代码会将这些命令检索到一个 rxcpp 可观察对象中。它有一个特殊条件,如果在一
我试图了解 RxCpp 的要点,它是 Microsoft 响应式扩展的 native cpp 实现,看看我是否可以在项目中使用它,但我无法理解这些概念。 如果我有一个具有以下结构的可观察模板: str
我在 C# 中使用 RX 进行编程,现在我希望在 C++ 中使用 rxcpp 进行编程。我正在尝试做最简单的事情,定义 observable 的类成员变量. 问题是 observable定义为: te
我正在使用 RxCPP,但很难理解它的行为。 这里有两个程序,一个在 Rx.Net 中,另一个在 RxCPP 中。他们应该输出相同的打印件,但实际上并没有。 该程序从鼠标流中获取点,并计算点之间的增量
我有一个 Win32 控制台应用程序,我已经导入了对 Rx 的引用。 Intellisense 允许我这样做.... using namespace System::Reactive; using n
我从github上下载了RxCpp,修改CMakeLists.txt如下(为了用VS2015构建跨平台项目,我使用微软修改的CMake): cmake_minimum_required (VERSIO
我需要在 rxcpp 中实现一个相机采样系统。我想象的方式是将 requestStream 作为参数传递并接收 responseStream 每次调用 requestSample 时,都会创建一个新的
我创建了一个简单的 rx 运算符,它可以将字符串流转换为 json 流,并且工作正常。但是,我希望能够引发自定义异常,但我不确定如何调用订阅的 on_error 方法 运算符称为 convertStr
我正在从严重依赖 Rx 的 C# 移植一些代码,但我很难找到一些最常用的 C# 方法的 C++ 等价物。 特别是,我想从订阅/取消订阅逻辑中创建一个可观察对象。在 C# 中,我使用 Observabl
我试图了解如何使用 rxcpp,我的印象是,当一个可观察对象发出一个值时,所有订阅的观察者都会通过调用他们的 on_next() 方法并向他们传递发出的值来得到通知。 下面的例子不是这种情况: aut
我有一个设备可以流式传输一些事件。我想使用响应式扩展来模拟以下行为: 检测用户何时连接加密狗(我的程序检查连接加密狗的事件)。 加密狗连接后开始从加密狗捕获数据流。 能够检测加密狗何时断开连接并返回到
我是一名优秀的程序员,十分优秀!