小编jc2*_*211的帖子

ROS:在 nodehandle.subscribe 中使用 lambda 作为回调

我希望能够通过 lambda 定义回调,但我无法获得任何匹配的函数签名。

std::function<void(const sensor_msgs::PointCloud2)> callback = 
 [&mycapture](const sensor_msgs::PointCloud2 msg) { 
 // do something with msg and capture
 };

auto sub = ros_node.subscribe("/sometopic", 1, callback)
Run Code Online (Sandbox Code Playgroud)

我无法让它工作,因为 subscribe 需要一个函数指针。我正在尝试用 ROS 做的事情可能吗?也就是说,我可以将一个带有捕获的 lambda 传递给 subscribe 方法吗?

c++ lambda ros

8
推荐指数
4
解决办法
4996
查看次数

RXCPP:阻塞功能超时

考虑一个阻塞函数: this_thread::sleep_for(milliseconds(3000));

我试图获得以下行为:

Trigger Blocking Function               

|---------------------------------------------X
Run Code Online (Sandbox Code Playgroud)

我想触发阻塞功能,如果时间太长(超过两秒),它应该超时。

我做了以下事情:

my_connection = observable<>::create<int>([](subscriber<int> s) {
    auto s2 = observable<>::just(1, observe_on_new_thread()) |
    subscribe<int>([&](auto x) {
        this_thread::sleep_for(milliseconds(3000));
        s.on_next(1);
    });
}) |
timeout(seconds(2), observe_on_new_thread());
Run Code Online (Sandbox Code Playgroud)

我无法让它发挥作用。对于初学者来说,我认为 s 不能从不同的线程 on_next 。

所以我的问题是,正确的反应方式是什么?如何在 rxcpp 中包装阻塞函数并为其添加超时?

随后,我想要获得一个行为如下的 RX 流:

Trigger                Cleanup

|------------------------X
                           (Delay)   Trigger           Cleanup
                                       |-----------------X
Run Code Online (Sandbox Code Playgroud)

c++11 rxcpp

5
推荐指数
1
解决办法
886
查看次数

标签 统计

c++ ×1

c++11 ×1

lambda ×1

ros ×1

rxcpp ×1