c++ - DBus 上的 BlueZ 在不同的时间间隔内停止响应

标签 c++ ubuntu bluez gio

我目前正在使用 BlueZ DBus API 扫描 BLE 设备,但它在不同的时间间隔后完全停止响应。有时是几分钟,有时是一两个小时。
我的假设是我忘记做某事。奇怪的是,在我退出应用程序后,bluetoothctl 之类的工具和 hciconfig也不再回应。有时重新启动不足以让它再次工作,我需要重新启动机器。它也发生在几台不同的机器上。
我正在使用以下方式获取公共(public)汽车:

GError* error = nullptr;
mConnection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, nullptr, &error);
开始循环:
mLoop = g_main_loop_new(nullptr, false);
g_main_loop_run(mLoop); 
然后我通过设置 Powered 开启适配器。属性为 true 并调用 StartDiscovery .然后通过以下方式报告设备:
guint iface_add_sub = g_dbus_connection_signal_subscribe(mConnection, "org.bluez", "org.freedesktop.DBus.ObjectManager", "InterfacesAdded", nullptr, nullptr, G_DBUS_SIGNAL_FLAGS_NONE, device_appeared, this, nullptr);

guint iface_remove_sub
        = g_dbus_connection_signal_subscribe(mConnection, "org.bluez", "org.freedesktop.DBus.ObjectManager", "InterfacesRemoved", nullptr, nullptr, G_DBUS_SIGNAL_FLAGS_NONE, device_disappeared, this, nullptr);
我是否缺少任何东西来阻止 BlueZ 停止响应?
  • 蓝牙-v = 5.53
  • ldd --version = GLIBC 2.31-0ubuntu9.2
  • 最佳答案

    正如您所观察到的,Bluez 无法无限期扫描,因为它会崩溃。在我看来,这是一个错误……
    我所做的是扫描 8 秒然后停止扫描。然后 Bluez 将清理内部缓存。在允许 1 秒进行清理后,我重新开始扫描。
    这样它会保持更长的时间。尽管如此,一周左右后它仍然可能崩溃......

    关于c++ - DBus 上的 BlueZ 在不同的时间间隔内停止响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68893504/

    相关文章:

    c++ - Boost::asio::async_write,处理程序只调用一次

    linux - 为什么我的 Linux 提示只显示 ">"符号?

    c - 什么取代了 libbluetooth1-dev 以使用 BlueZ 进行 C 编程?

    在我不得不重置适配器后,蓝牙的 Python 代码抛出错误

    c++ - 内存集不工作

    c++ - 当代码太长时,方法的大括号不匹配

    c++ - 检测不正确的堆栈变量使用

    scala - 如何在 IntelliJ 中创建 scala 应用程序并创建 scala 类(Ubuntu)?

    ubuntu - 在 Filezilla 中恢复保存的密码

    sockets - Bluez 核心干扰 HCI 套接字命令