我正在尝试在与main((不同的线程上运行SFML窗口。调用 sf::Window::close 不会导致任何直接问题,但是在 main(( 结束时,可能会在 UI 对象被破坏时发生分段错误错误。如果未调用 sf::Window::close,则不会发生分段错误。
我正在运行一个完全更新的 Debian 10 安装。
#include <thread>
#include <SFML/Graphics.hpp>
int main() {
sf::Window window(sf::VideoMode(500,500), "Test");
std::thread th(&sf::Window::close, &window);
th.join();
}
我发现了问题。在关闭另一个线程之前,您必须停用该窗口,如下所示。我最初在文档中错过了这一点。
#include <thread>
#include <SFML/Graphics.hpp>
int main() {
sf::Window window(sf::VideoMode(500,500), "Test");
window.setActive(false);
std::thread th(&sf::Window::close, &window);
th.join();
}