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



我目前正在开发一款游戏,我想创建一个加载屏幕,基本上显示加载所有资源的过程。为此,我决定创建一个单独的线程来处理窗口。我知道可能有更有效的解决方案,但我想创建一个特殊的鼠标光标,这是允许我在应用程序加载大文件时没有错误的鼠标的唯一方法。

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

谁能在这里帮我?

你把它倒过来了。你通过加载资源阻止了主线程,并创建了一个新线程来保持 UI 响应。这不仅在长期内不会顺利进行,而且在短期内,您的操作系统仍然认为您的应用程序被阻止,因为主线程无响应。操作系统不知道您创建了第二个线程来保持用户娱乐。

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

最新更新