首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在rxcpp中处理请求/响应流

如何在rxcpp中处理请求/响应流
EN

Stack Overflow用户
提问于 2017-07-11 18:56:25
回答 1查看 492关注 0票数 2

我需要在rxcpp中实现一个摄像头采样系统。我想象的方式是将requestStream作为参数传递并接收responseStream

每次调用requestSample时,都会创建一个新的摄像机会话,并且当为requestStream调用on_complete()时,摄像机会话将终止

代码语言:javascript
复制
observable<ImageSample> requestSampleStream(observable<ImageRequest> requestStream$) {
  auto response$ = rxcpp::observable<>::create<ImageSample>(
  [&](rxcpp::subscriber<ImageSample> s){
    auto request_next = [&](ImageRequest imageRequest) {
      cout << "image request next" << endl;
      SampleImage vsi;
      s.on_next(vsi);
    };

    auto request_completed = [&] {
      cout << "no more samples needed.. close camera" << endl;
      s.on_completed();
    };

    auto request_error = [&](std::exception_ptr e) {
      try { rethrow_exception(e); }
      catch (const exception &ex) {
        cerr << "error happened on request stream.. close the camera and send error on return stream" << endl << ex.what() << endl;
      }

      s.on_error(e);
    };

    requestStream$.subscribe(request_next,
                              request_error,
                              request_completed
    );
  });

  return response$;
}

这里的问题是,在调用requestStream$.subscribe(request_next..时,我会得到一个EXC_BAD_ACCESS

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-11 22:54:29

s是一个局部堆栈变量,但是lambda捕获了对s的引用。当lambda被调用时,这个引用是无效的。将[&]更改为[=],这应该会起作用!

另一种选择是使用现有的map算法。

代码语言:javascript
复制
observable<ImageSample> requestSampleStream(observable<ImageRequest> requestStream$) {
    return requestStream$ |
        map([](ImageRequest imageRequest){
            cout << "image request next" << endl;
            SampleImage vsi;
            s.on_next(vsi);
        })
        // optional
        | tap([&](std::exception_ptr e) {
            try { rethrow_exception(e); }
            catch (const exception &ex) {
                cerr << "error happened on request stream.. close the camera and send error on return stream" << endl << ex.what() << endl;
            }
        },
        [](){
            cout << "no more samples needed.. close camera" << endl;
        })
        ;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45032572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档