2010-10-13 3 views
1

Я только начал использовать библиотеку SFML и ее фантастический вид. Однако при изменении размера окна, перетаскивая угол мышью, я не получаю события изменения размера, пока я не выпущу мышь. Это означает, что я не могу обновить свою графику до тех пор, пока мышь не будет выпущена (игровой цикл находится в потоке gui), а также приводит к массовому потоку событий, проходящих через все позиции изменения размера.События изменения размера окна SFML, блокирующие основную нить

Как я могу сделать так, чтобы размер не блокировал поток?

ответ

2

Windows вызывает это. GetEvent() становится блокирующим, если вы перемещаете или изменяете размер окна. (Еще одна забавная причина, чтобы ненавидеть эту ОС ...)

Я решил это с помощью отдельной темы для опроса событий. Посмотрите на это: (интересная часть для вас полностью в main.cpp.)

https://bitbucket.org/torokati44/netframework/src/93bdf20d0f65/main.cpp

+0

Почему вы используете 2 очереди событий (event_buffer_a, event_buffer_b)? И почему вы используете std :: queue вместо std :: vector? – Truncheon

+0

Это называется двойной буферизацией. Ну ... Я не уверен, действительно ли это действительно необходимо, но теперь это работает, и у меня есть более важные вещи, чтобы полировать в этом случае, поэтому я не буду с ним спорить прямо сейчас. Да, это может быть сделано только с одним буфером. Причина, по которой я сделал два, может заключаться в том, что я думал, что вставка будет блокироваться, но только блоки GetEvent, поэтому вставка после этого в порядке. Кроме того, я не думаю, что они должны быть деки, очереди будет достаточно. И я использую очередь, потому что быстрее поп/толчок, чем вектор, потому что это связанный список, а не «массив стиля С» в фоновом режиме. – torokati44