Как вы управляете окном SFML из отдельного потока? - PullRequest
1 голос
/ 16 июня 2020

В настоящее время я работаю над игрой, в которой я хотел создать экран загрузки, который в основном показывает процесс загрузки всех ресурсов. Для этого я решил создать отдельный поток, который обрабатывает окно. Я знаю, что могут быть более эффективные решения, но я хотел создать специальный курсор мыши, и это был единственный способ, который позволил мне сделать это без глючной мыши, когда приложение загружает большой файл.

Я прочитал потоки на странице руководства по SFML и узнал, что мне нужно сделать window.setActive(false) в основном потоке, а затем window.setActive(true) в отдельном потоке, чтобы иметь доступ к окну в отдельном потоке. нить без каких-либо проблем. Это работает нормально, не вызывает никаких ошибок и очень красиво отображает экран загрузки. Однако я не могу перемещать окно или каким-либо образом с ним взаимодействовать. Курсор мыши при загрузке закрывается синим кольцом от мыши, и я не могу ни закрыть, ни переместить, ни изменить размер окна, хотя я использовал sf::Style::Default, поэтому это должно быть возможно.

Кто-нибудь может помочь я здесь?

1 Ответ

3 голосов
/ 16 июня 2020

У вас все наоборот. Вы заблокировали основной поток загрузкой своих ресурсов и создали новый поток, чтобы пользовательский интерфейс оставался отзывчивым. Это не только не go в долгосрочной перспективе, но и в краткосрочной перспективе ваша операционная система по-прежнему считает, что ваше приложение заблокировано, потому что основной поток не отвечает. ОС не знает, что вы создали второй поток, чтобы развлекать пользователя.

Вместо этого вы должны сохранить отзывчивый пользовательский интерфейс в основном потоке и создать дополнительный поток для выполнения тяжелой работы и блокировки. Таким образом, вам не придется полностью бороться с вашей графической библиотекой (и не имеет значения, является ли это SFML, потому что все они это делают), плюс ваша операционная система не будет вести себя так, как если бы вы заблокировали свое приложение.

...