我试图弄清楚在 wl_display_dispatch 和 wl_display_roundtrip 之间应该先调用哪一个,然后再调用哪一个。我已经看到了两个订单,所以想知道哪个是正确的。
1st order:
wl_display_get_registry(display); wl_registry_add_listener() // this call is just informational
wl_display_dispatch();
wl_display_roundtrip();
我的想法是:wl_display_dispatch() 将从显示 fd 读取和调度事件,无论服务器发送但在服务器之间发送的任何内容都可能仍在处理请求,并且在短时间内 fd 可能为空。wl_display_dispatch 返回假设所有事件都已调度。然后调用 wl_display_roundtrip() 并将阻塞,直到服务器处理完所有请求并将其放入事件队列中。因此,在此之后,事件队列仍有待处理的事件,但没有调用 wl_display_dispatch()。这些待处理的事件将如何被调度?是 wl_display_dispatch() 等待服务器处理所有事件然后调度所有事件吗?
2nd order:
wl_display_get_registry(display); wl_registry_add_listener() // this call is just informational
wl_display_roundtrip();
wl_display_dispatch();
在这种情况下, wl_display_roundtrip() 等待服务器处理所有事件并将它们放入事件队列中,因此一旦返回,我们可以假设从服务器发送的所有事件都在队列中可用。然后调用 wl_display_dispatch() 将调度所有未决事件。
Order 2nd 在我看来是正确且合乎逻辑的,因为队列中没有剩余的未决事件。但是我已经在包括韦斯顿客户端示例代码在内的可能的地方看到了 Order 1st,所以我很困惑正确的调用顺序是什么。
如果有人能在这里澄清一下,那就太好了。提前致谢