【问题标题】:SFML fails in multithreadingSFML 在多线程中失败
【发布时间】:2020-12-08 18:45:52
【问题描述】:

我是 sfml 和 c++ 的新手。我有一个项目使用 sfml 库来绘制图形,但是当我向我的程序添加一个额外的线程时,它无法执行线程内的代码。这是我的代码:(请帮助我!)

#include <SFML\Graphics.hpp>
#include <SFML\window.hpp>
#include <SFML\system.hpp>
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;

int h(sf::RenderWindow* win){
    //do something
    win->close();
    this_thread::sleep_for(chrono::milliseconds(10));
    return 0;
}


int main(){
    sf::RenderWindow window(sf::VideoMode(800,600),"My window");
    thread t1(h,&window);
    _sleep(10000000);
    t1.join();
    return 0;
}

【问题讨论】:

  • 当它"...执行代码失败..."时会发生什么?
  • 它什么也没做。
  • 尝试将sf::RenderWindow window(...);移动到h()
  • 在我的真实程序中它必须在 main 中,我别无选择
  • 因为它是一个游戏,我应该同时做几个图形

标签: c++ visual-c++ sfml


【解决方案1】:

http://www.sfml-dev.org/tutorials/2.0/graphics-draw.php#drawing-from-threads

SFML 支持多线程绘图,你甚至不必做 任何让它工作的东西。唯一要记住的是停用 在另一个线程中使用它之前的一个窗口;那是因为一扇窗户 (更准确地说是它的 OpenGL 上下文)不能在多个 同时线程。

调用 window.setActive(false);在你的 main() 中,在你将它传递给线程之前。

请记住,您必须在 GUI 线程(主线程)中处理事件以获得最大的可移植性。

【讨论】:

  • 对此赞不绝口。让我头痛了好几天。
猜你喜欢
  • 2016-03-12
  • 2018-02-02
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多