我正在开发连接 OBD2 适配器并获取实时数据(如速度、转速、油门位置等)的应用程序。当我一次读取一个命令时,它可以正常工作,就像发送命令“010C\r”一样,我得到了当前转速。
我认为在一个请求中发送多个命令是不可能的。但是在 EngineLink HD、Dashcommand 等其他应用程序中,我们发现多个组件会同时更新,例如,如果我们正在驾驶汽车并检查 RPM、Sped 和 Throttle,那么它们每 1 秒更新一次。它看起来像实时数据。
我很惊讶这怎么可能?
我们添加了代码,例如如果用户想要显示 3 个组件,那么对于每个组件,都会生成一个线程并处理该命令的请求和响应。因此,在这种情况下,生成了 3 个线程并且我们得到了响应,但这需要太多时间,例如如果我们正在观看 3 个 PID 中的速度,那么速度会在 3-4 秒延迟后更新。
我们还需要锁定它发送请求和获取响应的代码 bcoz OBD2 适配器一次处理一个请求和响应。
如果我们不锁定代码,那么我们会得到无法预料的结果,这可能是由于应用程序和 obd2 适配器之间的套接字通信使用的公共共享流造成的。
但现在我想一次读取多个命令。我的意思是在某个时间点,我想知道速度、RPM 和油门位置等。所以我想在一个请求中发送上述命令并一次得到响应。
这怎么可能 ?有人可以指导我。