You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BlueZ GATT温度采集代码中set_temperature_callback为何无限循环执行

关于set_temperature_callback定时循环调用的原因说明
  • 触发入口:当你的Unity项目作为蓝牙客户端订阅该GATT温度特征值的通知时,会自动调用TempCharacteristic类的StartNotify方法,该方法内部会调用父类Characteristic提供的add_timeout接口,向程序底层的GLib主循环注册了一个延时为NOTIFY_TIMEOUT(即1000ms)的定时任务,指定回调函数为set_temperature_callback。
  • 循环实现核心逻辑:GLib的定时回调机制有固定规则:如果回调函数执行结束后返回True,主循环会自动按相同的时间间隔重新注册该定时任务,下次时间到了再次触发回调;如果返回False则会销毁该定时任务,不再触发。你的代码中set_temperature_callback最后返回的是self.notifying变量,只要客户端没有取消订阅,notifying就会保持True,因此每次回调执行完都会返回True,主循环就会持续调度该回调,形成1000ms间隔的无限循环。
  • 循环终止逻辑:当蓝牙客户端取消订阅特征值通知时,会触发StopNotify方法将self.notifying置为False,下一次set_temperature_callback执行时就会返回False,主循环就会停止调度该回调,循环终止。

内容的提问来源于stack exchange,提问作者Michael Effraimidis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:48:04