• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ qi::Promise类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中qi::Promise的典型用法代码示例。如果您正苦于以下问题:C++ Promise类的具体用法?C++ Promise怎么用?C++ Promise使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



在下文中一共展示了Promise类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: onEventConnected

 static void onEventConnected(RemoteObject* ro, qi::Future<SignalLink> fut, qi::Promise<SignalLink> prom, SignalLink id) {
   if (fut.hasError()) {
     prom.setError(fut.error());
     return;
   }
   prom.setValue(id);
 }
开发者ID:ZhaozhengPlus,项目名称:libqi,代码行数:7,代码来源:remoteobject.cpp


示例2: onSocketDisconnected

 void ServiceDirectoryClient::onSDEventConnected(qi::Future<SignalLink> future,
   qi::Promise<void> promise, bool isAdd)
 {
   if (promise.future().isFinished()) {
     return;
   }
   if (future.hasError())
   {
     qi::Future<void> fdc = onSocketDisconnected(future.error());
     fdc.connect(&qi::Promise<void>::setError, promise, future.error());
     return;
   }
   bool ready = false;
   {
     boost::mutex::scoped_lock lock(_mutex);
     if (isAdd)
       _addSignalLink = future.value();
     else
       _removeSignalLink = future.value();
     ready = _addSignalLink && _removeSignalLink;
   }
   if (ready)
   {
     promise.setValue(0);
     connected();
   }
 }
开发者ID:cgestes,项目名称:libqi,代码行数:27,代码来源:servicedirectoryclient.cpp


示例3: serviceReady

 void serviceReady(qi::Future<void> fut, qi::Promise<unsigned int> result, unsigned int idx) {
   if (fut.hasError()) {
     result.setError(fut.error());
     return;
   }
   result.setValue(idx);
 }
开发者ID:hejunbok,项目名称:libqi,代码行数:7,代码来源:objectregistrar.cpp


示例4: call_from_java_cont

static void call_from_java_cont(qi::Future<qi::AnyReference> ret,
    qi::Promise<qi::AnyValue> promise)
{
  if (ret.hasError())
    promise.setError(ret.error());
  else
    promise.setValue(qi::AnyValue(ret.value(), false, true));
}
开发者ID:RevanthK,项目名称:libqi-java,代码行数:8,代码来源:callbridge.cpp


示例5: onMetaObject

 void RemoteObject::onMetaObject(qi::Future<qi::MetaObject> fut, qi::Promise<void> prom) {
   if (fut.hasError()) {
     qiLogVerbose() << "MetaObject error: " << fut.error();
     prom.setError(fut.error());
     return;
   }
   qiLogVerbose() << "Fetched metaobject";
   setMetaObject(fut.value());
   prom.setValue(0);
 }
开发者ID:ZhaozhengPlus,项目名称:libqi,代码行数:10,代码来源:remoteobject.cpp


示例6: slowDisconnect

void slowDisconnect(qi::Promise<void> ready, qi::Promise<void> done, qi::Future<void> wait, qi::AnyObject obj, boost::shared_ptr<qi::SignalLink> link)
{
  ready.setValue(0);
  wait.wait();
  try {
    obj.disconnect(*link);
  }
  catch (...) {}
  done.setValue(0);
}
开发者ID:dmerejkowsky,项目名称:libqi,代码行数:10,代码来源:test_event_remote_connect.cpp


示例7: onFutureFinished

  void ObjectRegistrar::onFutureFinished(qi::Future<unsigned int> fut, long id, qi::Promise<unsigned int> result)
  {
    if (fut.hasError()) {
      result.setError(fut.error());
      return;
    }
    qi::ServiceInfo              si;
    RegisterServiceMap::iterator it;

    {
      boost::mutex::scoped_lock sl(_registerServiceRequestMutex);
      it = _registerServiceRequest.find(id);
      if (it != _registerServiceRequest.end())
        si = it->second.second;
      if (fut.hasError()) {
        _registerServiceRequest.erase(id);
        result.setError(fut.error());
        return;
      }
    }
    unsigned int idx = fut.value();
    si.setServiceId(idx);
    {
      boost::mutex::scoped_lock sl(_servicesMutex);
      BoundService bs;
      bs.id          = idx;
      bs.object      = it->second.first;
      bs.serviceInfo = si;
      bs.name        = si.name();
      BoundServiceMap::iterator it;
      it = _services.find(idx);
      if (it != _services.end()) {
        qiLogError() << "A service is already registered with that id:" << idx;
        result.setError("Service already registered.");
        return;
      }
      _services[idx] = bs;
      //todo register the object on the server (find a better way)
      Server::addObject(idx, bs.object);
    }

    {
      boost::mutex::scoped_lock sl(_serviceNameToIndexMutex);
      _serviceNameToIndex[si.name()] = idx;
    }
    {
      boost::mutex::scoped_lock sl(_registerServiceRequestMutex);
      _registerServiceRequest.erase(it);
    }

    // ack the Service directory to tell that we are ready
    qi::Future<void> fut2 = _sdClient->serviceReady(idx);
    fut2.connect(boost::bind(&serviceReady, _1, result, idx));
  }
开发者ID:hejunbok,项目名称:libqi,代码行数:54,代码来源:objectregistrar.cpp


示例8: listenStandaloneCont

  void SessionPrivate::listenStandaloneCont(qi::Promise<void> p, qi::Future<void> f)
  {
    if (f.hasError())
      p.setError(f.error());
    else
    {
      _sdClient.setServiceDirectory(boost::static_pointer_cast<ServiceBoundObject>(_sd._serviceBoundObject)->object());
      // _sdClient will trigger its connected, which will trigger our connected

      p.setValue(0);
    }
  }
开发者ID:bsautron,项目名称:libqi,代码行数:12,代码来源:session.cpp


示例9: onServiceTrackingCancelled

  void SessionPrivate::onServiceTrackingCancelled(qi::Promise<void> promise,
      boost::shared_ptr<qi::Atomic<int> > link)
  {
    SignalLink link2 = link->swap(0);

    if (link2 == 0)
      return;

    _sdClient.serviceAdded.disconnect(link2);
    promise.setCanceled();
  }
开发者ID:bsautron,项目名称:libqi,代码行数:11,代码来源:session.cpp


示例10: f

 int f(int end, qi::Promise<void> finished)
 {
   int startval = prop.get();
   EXPECT_FALSE(calling);
   calling = true;
   qi::os::msleep(5);
   EXPECT_TRUE(calling);
   calling = false;
   EXPECT_EQ(startval, prop.get());
   if (++callcount == end + 1)
     finished.setValue(0);
   return 42;
 }
开发者ID:dmerejkowsky,项目名称:libqi,代码行数:13,代码来源:test_strand.cpp


示例11: addSdSocketToCache

  void SessionPrivate::addSdSocketToCache(Future<void> f, const qi::Url& url,
                                          qi::Promise<void> p)
  {
    qiLogDebug() << "addSocketToCache processing";
    if (f.hasError())
    {
      qiLogDebug() << "addSdSocketToCache: connect reported failure";
      _serviceHandler.removeService("ServiceDirectory");
      p.setError(f.error());
      return;
    }

    // Allow the SD process to use the existing socket to talk to our services
    _serverObject.registerSocket(_sdClient.socket());

    /* Allow reusing the SD socket for communicating with services.
     * To do this, we must add it to our socket cache, and for this we need
     * to know the sd machineId
     */
     std::string mid;
     try
     {
       mid = _sdClient.machineId();
     }
     catch (const std::exception& e)
     { // Provide a nice message for backward compatibility
       qiLogVerbose() << e.what();
       qiLogWarning() << "Failed to obtain machineId, connection to service directory will not be reused for other services.";
       p.setValue(0);
       return;
     }
     TransportSocketPtr s = _sdClient.socket();
     qiLogVerbose() << "Inserting sd to cache for " << mid <<" " << url.str() << std::endl;
     _socketsCache.insert(mid, s->remoteEndpoint(), s);
     p.setValue(0);
  }
开发者ID:bsautron,项目名称:libqi,代码行数:36,代码来源:session.cpp


示例12: onTrackedServiceAdded

  void SessionPrivate::onTrackedServiceAdded(const std::string& actual,
      const std::string& expected,
      qi::Promise<void> promise,
      boost::shared_ptr<qi::Atomic<int> > link)
  {
    if (actual != expected)
      return;

    // only do it once in case of multiple calls
    SignalLink link2 = link->swap(0);

    if (link2 == 0)
      return;

    _sdClient.serviceAdded.disconnect(link2);

    promise.setValue(0);
  }
开发者ID:bsautron,项目名称:libqi,代码行数:18,代码来源:session.cpp


示例13: TEST

TEST(Test, Recurse)
{
  payload = qi::Promise<bool>();
  TestSessionPair       p1;
  TestSessionPair       p2(p1);
  qi::DynamicObjectBuilder     ob1, ob2;
  ob1.advertiseMethod("onFire1", &onFire1);
  ob2.advertiseMethod("onFire2", &onFire2);
  qi::AnyObject    oserver1(ob1.object()), oserver2(ob2.object());
  unsigned int           nbServices = TestMode::getTestMode() == TestMode::Mode_Nightmare ? 2 : 1;

  // Two objects with a fire event and a onFire method.
  ASSERT_NO_THROW(p1.server()->registerService("coin1", oserver1).hasValue(2000));
  ASSERT_NO_THROW(p2.server()->registerService("coin2", oserver2).hasValue(2000));
  EXPECT_EQ(nbServices, p1.server()->services(qi::Session::ServiceLocality_Local).value().size());
  EXPECT_EQ(nbServices, p2.server()->services(qi::Session::ServiceLocality_Local).value().size());
  oclient1 = p2.client()->service("coin1");
  oclient2 = p1.client()->service("coin2");
#ifdef WIN32
  int niter = 1000;
#else
  int niter = 1000;
#endif
  if (TestMode::getTestMode() == TestMode::Mode_SSL)
  {
    niter /= 100;
  }
  if (getenv("VALGRIND"))
  {
    std::cerr << "Valgrind detected, reducing iteration count" << std::endl;
    niter = 50;
  }
  oclient1.call<void>("onFire1", niter);
  ASSERT_NO_THROW(payload.future().hasValue(2000));
  oclient1.reset();
  oclient2.reset();
}
开发者ID:aldebaran,项目名称:libqi,代码行数:37,代码来源:test_call_many.cpp


示例14: producer

void producer(qi::Promise<int> pro) {
  qi::os::msleep(100);
  pro.setValue(42);
}
开发者ID:gnatali,项目名称:libqi,代码行数:4,代码来源:test_future.cpp


示例15: unlock

void unlock(qi::Promise<int> prom, bool* tag)
{
  *tag = true;
  prom.setValue(1);
}
开发者ID:gnatali,项目名称:libqi,代码行数:5,代码来源:test_future.cpp


示例16: testDelete

void testDelete(bool afirst, bool disconnectFirst, qi::Promise<void> end)
{
  qi::Promise<void> p0;
  qi::Promise<void> p1;
  qi::SignalLink fireId, onFireId, onFireId2;
  qi::AnyObject *a;
  qi::AnyObject *b;
  {
    qi::DynamicObjectBuilder oba, obb;
    fireId = oba.advertiseSignal<int>("fire");
    onFireId = obb.advertiseMethod("onFire", boost::function<void(int)>(boost::bind<void>(&onFire, _1, boost::ref(p0))));
    onFireId2 = obb.advertiseMethod("onFire2", boost::function<void(int)>(boost::bind<void>(&onFire2, _1, boost::ref(p1))));
    a = new qi::AnyObject(oba.object());
    b = new qi::AnyObject(obb.object());
  }
  qi::SignalLink linkId = (*a).connect(fireId, *b, onFireId);
  (*a).connect(fireId, *b, onFireId2);
  //std::vector<qi::SignalSubscriber> subs = (*a)->subscribers(fireId);
  //EXPECT_EQ(static_cast<unsigned int>(2), subs.size());
  // Subs ordering is unspecified
  //EXPECT_EQ(subs[0].method + subs[1].method, onFireId + onFireId2);
  lastPayload = 11;
  lastPayload2 = 11;
  (*a).post("fire", 12);
  EXPECT_TRUE(p0.future().hasValue(1000));
  EXPECT_TRUE(p1.future().hasValue(1000));
  EXPECT_EQ(12, *lastPayload);
  EXPECT_EQ(12, *lastPayload2);
  p0 = qi::Promise<void>();
  p1 = qi::Promise<void>();
  if (disconnectFirst)
  {
    (*a).disconnect(linkId);
    (*a).post("fire", 13);
    EXPECT_TRUE(p1.future().hasValue(1000));
    EXPECT_EQ(12, *lastPayload);
    EXPECT_EQ(13, *lastPayload2);
    p0 = qi::Promise<void>();
    p1 = qi::Promise<void>();
  }
  if (afirst)
  {
    delete a;
    delete b;
  }
  else
  {
    int e1 = *lastPayload, e2 = *lastPayload2;
    delete b;
    // wait for the object to be deleted (signal callbacks may still be
    // running)
    qi::os::msleep(10);
    (*a).post("fire", 12);
    EXPECT_EQ(e1, *lastPayload);
    EXPECT_EQ(e2, *lastPayload2);
    delete a;
  }
  ++completed;
  int next = *completed;
  if (next == 4)
  {
    end.setValue(0);
    return;
  }
  qi::getEventLoop()->post(
    boost::bind(&testDelete, !!((int)next/2), !!((int)next%2), end));
}
开发者ID:ZhaozhengPlus,项目名称:libqi,代码行数:67,代码来源:test_event_connect.cpp


示例17: onFire2

void onFire2(const int& pl, qi::Promise<void>& p)
{
  ++lastPayload2;
  p.setValue(0);
}
开发者ID:ZhaozhengPlus,项目名称:libqi,代码行数:5,代码来源:test_event_connect.cpp


示例18: log

 void log(const qi::LogLevel,
          const qi::Clock::time_point,
          const qi::SystemClock::time_point,
          const char*,
          const char*,
          const char*,
          const char*,
          int) {
   start.future().wait();
   if (++count == MAX)
     finished.setValue(0);
 }
开发者ID:ZhaozhengPlus,项目名称:libqi,代码行数:12,代码来源:test_qilog_async.cpp


示例19: operator

 void operator()(int newValue)
 {
   if (newValue == targetValue)
   {
     running.setValue(true);
   }
 }
开发者ID:ZhaozhengPlus,项目名称:libqi,代码行数:7,代码来源:test_property.cpp


示例20: onFire2

void onFire2(const int& pl)
{
  if (pl)
    oclient1.async<void>("onFire1", pl-1);
  else
    payload.setValue(true);
}
开发者ID:aldebaran,项目名称:libqi,代码行数:7,代码来源:test_call_many.cpp



注:本文中的qi::Promise类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ qjson::Parser类代码示例发布时间:2022-05-31
下一篇:
C++ qi::Future类代码示例发布时间:2022-05-31
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap