SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Thread
В этой теме 17 ответов, 2 участника, последнее обновление val67 8 года/лет, 6 мес. назад.
-
АвторСообщения
-
Как “так”?
Лучше поток один раз запускать, не нужно “пересоздавать” потоки, кроме проблем это ничего не даст.
И почему у меня с оперативкой всё нормально?
Для меня это загадка, но в одной из тем отписался человек запустивший экзешник и увидел тоже самое. Как и почему это проявляется не у всех, я без понятия.
Попробуйте вот такой вариант
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101#include<SFML\Graphics.hpp>#define PI 3.1415926535class Main{private:sf::CircleShape* shape1, *shape2;sf::ContextSettings* settings;sf::Clock* clock;sf::RenderWindow* window;sf::Event* evt;sf::Mutex* mut;sf::Thread* drawThread, *coloredThread;float time;public:Main(){settings = new sf::ContextSettings(16,24,2,0,8);clock = new sf::Clock;window = new sf::RenderWindow(sf::VideoMode(800, 600), "SFML works!", sf::Style::Close, *settings);mut = new sf::Mutex;drawThread = new sf::Thread(&Main::THREAD_Draw, this);coloredThread = new sf::Thread(&Main::THREAD_Colored, this);evt = new sf::Event;shape1 = new sf::CircleShape(100);shape2 = new sf::CircleShape(100);shape1->setFillColor(sf::Color::Green);shape2->setFillColor(sf::Color::Red);shape1->setPosition(100, 0);shape2->setPosition(300, 0);time = 0;PlayMain();}void PlayMain(){window->setActive(false);drawThread->launch();coloredThread->launch();while (window->isOpen()){std::printf("Run MAIN\n");time = (float)clock->getElapsedTime().asMicroseconds()/800;clock->restart();while(window->pollEvent(*evt)){if(evt->type == sf::Event::Closed)window->close();}}}void THREAD_Draw(){while (window->isOpen()){std::printf("Run DRAW\t");window->clear();window->draw(*shape1);window->draw(*shape2);window->display();}}void THREAD_Colored(){while (window->isOpen()){std::printf("Run Colored\t");static float color[3] = {0,0,0};color[0] += time * 0.01;color[1] += time * 0.015;color[2] += time * 0.02;shape1->setFillColor(sf::Color(color[0], color[1], color[2]));shape2->setFillColor(sf::Color(color[1], color[2], color[0]));if(color[0] >= 255) color[0] = 0;if(color[1] >= 255) color[1] = 0;if(color[2] >= 255) color[2] = 0;}}};int main(){Main xMain;return 0;}Попробуйте вот такой вариант
Ну я собственно сразу так и сделал. Ток мне указатели ваши не нравятся, они сильно провоцируют утечки памяти. Мб лучше shared_ptr?
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.