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