我目前正在做一个游戏,我想创建一个加载屏幕,基本上显示加载所有资源的过程。 为此,我决定创建一个单独的线程来处理窗口。 我知道可能有更有效的解决方案,但我想创建一个特殊的鼠标光标,而这种方式是唯一允许我在应用程序加载大文件时不使用错误鼠标的方式。
我阅读了SFML教程页面上的线程,了解到必须在主线程中执行window.setactive(false)
,然后在单独的线程中执行window.setactive(true)
,以便在单独的线程中访问窗口而不出现任何问题。 这工作得很好,它不会抛出任何错误,并且它很好地显示了加载屏幕。 但是,我不能四处移动窗口,也不能以任何方式与它进行交互。 当鼠标加载时,鼠标光标会被鼠标上的蓝色环覆盖,即使我使用了sf::style::default
,我也不能关闭,移动或调整窗口的大小,所以应该是可以的。
有人能帮帮我吗?
你把它倒了。 您在加载资源时阻塞了主线程,并创建了一个新线程来保持UI的响应性。 这不仅在长期内不会很好,而且在短期内,你的操作系统仍然认为你的应用程序被屏蔽了,因为主线程没有响应。 操作系统不知道您创建了第二个线程来保持用户的娱乐。
相反,您应该将响应性UI保留在主线程上,并创建一个额外的线程来执行繁重的提升和阻塞工作。 这样你就不必一直纠结于你的图形库(不管那是不是SFML,因为它们都是这样做的),而且你的操作系统也不会表现得好像你阻止了你的应用程序。