Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.4] Okno w wątku w klasie

Ostatnio zmodyfikowano 2016-11-15 21:13
Autor Wiadomość
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 :/

C/C++
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();
}
P-153710
j23
» 2016-11-15 10:43:39
Stwórz window wewnątrz wątku.
P-153721
jasiek1309
Temat założony przez niniejszego użytkownika
» 2016-11-15 16:37:10
Dalej to samo :/
P-153744
j23
» 2016-11-15 18:37:08
Prawdopodobnie błąd jest w innym miejscu. Jak używasz tej klasy?
P-153747
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:

C/C++
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();
    }
}
P-153761
« 1 »
  Strona 1 z 1