Я хочу, чтобы мой цикл событий окна был в моем основном потоке, а все остальное работало в отдельном потоке.
Цикл выглядит так:
void loop(sf::RenderWindow& window)
{
//I need the context here
while (window.isOpen())
{
//Do stuff here
}
}
int main()
{
sf::RenderWindow window(...);
std::thread lthread(&loop, std::ref(window));
while (window.isOpen())
{
sf::Event event;
while (window.waitEvent(event))
{
//Handle events
}
}
lthread.join();
}
Как мне переключить нить в контексте?
void renderingThread(sf::Window* window)
{
// activate the window's context
window->setActive(true);
// the rendering loop
while (window->isOpen())
{
// draw...
// end the current frame -- this is a rendering function (it requires the context to be active)
window->display();
}
}
int main()
{
// create the window (remember: it's safer to create it in the main thread due to OS limitations)
sf::Window window(sf::VideoMode(800, 600), "OpenGL");
// deactivate its OpenGL context
window.setActive(false);
// launch the rendering thread
sf::Thread thread(&renderingThread, &window);
thread.Launch();
// the event/logic/whatever loop
while (window.isOpen())
{
...
}
return 0;
}