[SFML 2.4] Okno w wątku w klasie
Ostatnio zmodyfikowano 2016-11-15 21:13
jasiek1309 Temat założony przez niniejszego użytkownika |
[SFML 2.4] Okno w wątku w klasie » 2016-11-15 01:11:45 Próbuje stworzyć klasę której będzie uruchamiany wątek w którym będzie tworzone okno :D w funkcji main mam stworzone inne okienko jak by coś :p Jednak gdy załączam to podczas uruchamiania wątku wszystko wywala :/ class news { public: news(); private: sf::RenderWindow window; sf::Vector2f winSize; void start(); public: bool active; sf::Thread thread; };
news::news() : winSize( sf::VideoMode::getDesktopMode().width / 2, sf::VideoMode::getDesktopMode().height / 1.5 ) , active( false ) , thread( & news::start, this ) { }
void news::start() { active = true; window.create( sf::VideoMode( winSize.x, winSize.y, sf::VideoMode::getDesktopMode().bitsPerPixel ), "", sf::Style::Close ); while( active ) { sf::Event event; while( window.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) active = false; } window.clear( sf::Color::Blue ); window.display(); } window.close(); } |
|
j23 |
» 2016-11-15 10:43:39 Stwórz window wewnątrz wątku. |
|
jasiek1309 Temat założony przez niniejszego użytkownika |
» 2016-11-15 16:37:10 Dalej to samo :/ |
|
j23 |
» 2016-11-15 18:37:08 Prawdopodobnie błąd jest w innym miejscu. Jak używasz tej klasy? |
|
jasiek1309 Temat założony przez niniejszego użytkownika |
» 2016-11-15 21:13:33 Już znalazłem :D Błąd był w tym że nie można tworzyć ani zamykać nowego okna w oddzielnym wątku :/ Więc zrobiłem tak: class news { public: news(); private: sf::Thread thread; sf::Vector2f winSize; sf::RenderWindow window; void realStart(); public: bool active; void start(); void stop(); };
news::news() : thread( & news::realStart, this ) , winSize( sf::VideoMode::getDesktopMode().width / 2, sf::VideoMode::getDesktopMode().height / 1.5 ) , ilogs( - 1, 10 ) , active( false ) { }
void news::start() { window.create( sf::VideoMode( winSize.x, winSize.y, sf::VideoMode::getDesktopMode().bitsPerPixel ), "News", sf::Style::Titlebar ); thread.launch(); }
void news::stop() { window.close(); active = false; thread.wait(); }
void news::realStart() { active = true; while( window.isOpen() ) { sf::Event event; while( window.pollEvent( event ) ) { } window.clear( sf::Color::Blue ); window.display(); } }
|
|
« 1 » |