首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接超时?

连接超时?
EN

Stack Overflow用户
提问于 2020-02-02 21:57:40
回答 1查看 473关注 0票数 2

我正在使用BLE连接到传感器,但是如果传感器电池已经失效,则需要很长时间(30秒)才能超时。有什么方法可以指定超时吗?

代码语言:javascript
复制
BLEClient* client = BLEDevice::createClient();
bool connected = client->connect(bleAddress);
EN

回答 1

Stack Overflow用户

发布于 2022-02-02 17:52:26

我无法理解这个API实际上是阻塞和修复的事实,这需要对FreeRTOS代码进行更改。

简短的回答:不,不可能在不做丑陋的改变的情况下设置超时。

但是如果超时值有意义的话,代码将是一个很好的近似。短时间超时(小于10秒)可能需要一个信号量。

代码语言:javascript
复制
bool doConnect(uint8_t timeout_secs) {
  static bool connected = false;
  TaskHandle_t hTask;
  xTaskCreate(
      [](void *unused)
      {
        pClient->connect(&device);
        connected = true;
        vTaskDelete(nullptr); // important line, FreeRTOS will crash.
      },
      "connect", //name of the task for debugging purposes.
      8192, // stack size
      nullptr, // object passed as void* unused
      2,  // priority
      &hTask);

  uint64_t expiration = millis() + timeout_secs * 1000;
  while  (!connected && millis() < expiration) {
    delay(500); // give the connect task a chance to run.
  }
  vTaskDelete(hTask);
  return connected;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60030996

复制
相关文章

相似问题

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