Я пытаюсь понять, какой из них следует вызывать раньше, а какой позже между 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(), которая отправляет все ожидающие события.
Порядок 2 выглядит для меня правильным и логичным, так как нет шансов, что в очереди останутся ожидающие события. но я видел Order 1st во многих местах, в том числе в коде примеров клиентов Weston, поэтому я сбит с толку, каков правильный порядок вызова.
Было бы здорово, если бы кто-нибудь разъяснил здесь. заранее спасибо