c++ - 如何从单独的线程控制 SFML 窗口?
问题描述
我目前正在开发一个游戏,我想创建一个加载屏幕,基本上显示加载所有资源的过程。为此,我决定创建一个单独的线程来处理窗口。我知道可能有更有效的解决方案,但我想创建一个特殊的鼠标光标,这是唯一允许我在应用程序加载大文件时没有错误鼠标的方法。
我阅读了 SFML 教程页面上的线程,我了解到我必须window.setActive(false)
在主线程中然后window.setActive(true)
在单独的线程中进行操作,才能访问单独线程中的窗口而不会出现任何问题。这很好用,它不会抛出任何错误,并且可以很好地显示加载屏幕。但是,我无法移动窗口或以任何方式与之交互。加载时鼠标光标被鼠标的蓝色环覆盖,即使我使用了,我也不能关闭、移动或调整窗口大小sf::Style::Default
,所以应该可以。
有谁可以帮我离开这里吗?
解决方案
你倒过来了。您在加载资源时阻塞了主线程,并创建了一个新线程来保持 UI 响应。不仅从长远来看不会顺利,而且在短期内,您的操作系统仍然认为您的应用程序被阻塞,因为主线程没有响应。操作系统不知道您创建了第二个线程来保持用户的娱乐。
相反,您应该将响应式 UI 保留在主线程上,并创建一个额外的线程来完成繁重的工作和阻塞工作。这样,您就不必一直为图形库而苦苦挣扎(这是否是 SFML 无关紧要,因为它们都这样做),而且您的操作系统不会表现得好像您阻止了您的应用程序一样。
推荐阅读
- angular - 如何修复“项目”缺少类型“项目 []”的以下属性:长度、弹出、推送、连接和 26 多个
- android - 如何在安卓设备的主屏幕上展示广告?
- c# - 为什么 ValueTuple 不能是 const?
- python - Raspberry Pi 3 上的 GNURadio 报告:没有名为 _osmosdr_swig 的模块
- ecmascript-6 - 如何使用 babel-node 导入 es6 模块?
- python - 使用 tkinter Text 小部件作为另一个程序的标准输出
- python - 有没有办法可以使用'if'函数根据原始输入字符串的第一个字母打印出一个字符串?
- python - Tensorflow 2.0 CNN 训练:图像增强功能将像素值移动到 [0, 1] 范围之外。这是一个问题吗?
- sql - 寻找重复的单元格
- python - 如何下载延迟加载的页面?