问题描述
文档建议我使用 nm-device-wifi-request-scan-async
,但我不明白如何理解它何时完成扫描。我应该传递的正确的第二个参数是什么,它是如何构造的以及我传递给 nm-device-wifi-request-scan-finish
的内容是什么?
我已经尝试使用 nm-device-wifi-get-last-scan
并确定扫描是刚刚发生还是上次扫描是很久以前的,但它似乎没有更新时间扫描 - 即,在请求扫描并打印出 nm-utils-get-timestamp-msec
和上次扫描之间的时间后,它只会在我重新启动整个程序时增加和减少,出于某种原因......
我真正需要的是每 x
秒请求一次扫描并了解它是否发生了。 已弃用 同步函数似乎允许通过回调函数实现这一点,但我不理解异步 :(
解决方法
nm_device_wifi_request_scan_async()
开始扫描,需要一段时间才能得到结果。
当 nm_device_wifi_get_last_scan()
时间戳被碰撞时,您将知道结果何时准备就绪。
它只会在我重新启动整个程序时增加和减少,出于某种原因......
last-scan 应该在 clock_gettime(CLOCK_BOOTTIME)
范围内。这应该永远不会减少(除非重新启动)。请参阅man clock_gettime
。
但我不懂异步
在这方面,sync 方法与 async 方法没有区别。他们都只开始新的扫描,当他们竞争时,NetworkManager 将要扫描(或很快开始)。由于其他原因 (https://smcv.pseudorandom.co.uk/2008/11/nonblocking/),不推荐使用同步方法。