gpt4 book ai didi

c++ - 如何从单独的线程控制SFML窗口?

转载 作者:行者123 更新时间:2023-12-02 09:53:24 25 4
gpt4 key购买 nike

我目前正在开发一款游戏,希望创建一个加载屏幕,该屏幕基本上显示了加载所有资源的过程。为此,我决定创建一个单独的线程来处理窗口。我知道可能会有更有效的解决方案,但是我想创建一个特殊的鼠标光标,而这是唯一的一种方法,它使我能够在应用程序加载大文件时不会出现鼠标松动的情况。

我在SFML教程页面上阅读了这些线程,并了解到我必须在主线程中执行window.setActive(false),然后在单独的线程中执行window.setActive(true)才能访问单独线程中的窗口而不会出现任何问题。这可以正常工作,不会引发任何错误,并且可以很好地显示加载屏幕。但是,我无法以任何方式来回移动窗口或与之交互。加载时,鼠标光标被鼠标的蓝色环覆盖,即使我使用sf::Style::Default,我也无法关闭,移动或调整窗口大小,因此应该可以。

有人可以帮我从这里出去吗?

最佳答案

你有倒退。您在加载资源时阻止了主线程,并创建了一个新线程以使UI保持响应。从长远来看,这不仅不会很好,而且从短期来看,您的操作系统仍然认为您的应用程序已被阻止,因为主线程没有响应。操作系统不知道您创建了第二个线程来保持用户的娱乐性。

相反,您应该将响应式UI保留在主线程上,并创建一个额外的线程来执行繁重的工作和阻塞工作。这样,您就不必一直与图形库费劲(并且,是否为SFML也无关紧要,因为它们都是这样做的),而且您的操作系统也不会像阻塞了您的应用程序那样工作。

关于c++ - 如何从单独的线程控制SFML窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62409791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com