Созданные ответы форума
-
АвторСообщения
-
Попробуйте вот такой вариант
Ну я собственно сразу так и сделал. Ток мне указатели ваши не нравятся, они сильно провоцируют утечки памяти. Мб лучше shared_ptr?
Как “так”?
Лучше поток один раз запускать, не нужно “пересоздавать” потоки, кроме проблем это ничего не даст.
И почему у меня с оперативкой всё нормально?
Для меня это загадка, но в одной из тем отписался человек запустивший экзешник и увидел тоже самое. Как и почему это проявляется не у всех, я без понятия.
В общем поспрашивал я на форумах, проблема нашлась:
Собственно проблема в том, что при создании чего-то в потоке, создается скрытый контекст opengl, оно пихается в “глобальную корзину” (std::set <GlContext*> internalContext) и при уничтожении потока не освобождается. Освобождение произойдет только когда больше не останется контекстов(в Context.cpp есть переменная count, когда станет ноль, то будет вызвана функция globalCleanup, которая почистит эту “корзинку”).
Ну и так пользоваться потоками очень не советуют.
Работает, но озу в геометрической прогрессии занимает
4 ядра, проверял еще давно – поддерживает.
В общем если верить http://en.sfml-dev.org/forums/index.php?topic=5673.0
в каждом потоке нужно деактивировать окно
Basically, a window must be deactivated (SetActive(false)) in the thread where it is active, before being used in another thread.
Я добавил
C++123456void Main::THREAD_Draw(){window->draw(*shape1);window->draw(*shape2);window->setActive(false);}и вроде как работает, и память жрет
Там ток на скрине не то подчеркнул)
Вложения:
You must be logged in to view attached files.мдэ, чудеса…
Все тоже
Вложения:
You must be logged in to view attached files.Скопировал просто код, не пашет. Не понимаю почему.
Вложения:
You must be logged in to view attached files.Я хочу сделать универсальную функцию таймер. Допустим у меня много действий в игре по таймеру, и если к каждому писать такой код…
Вот попробовал. Создал отдельную функцию и пытался сделать задержку отрисовки, но на деле окно просто зависало.
C++12345678910111213141516171819static float ftime = 0;void timer(int x){sf::Clock clock;while (ftime < x)ftime = clock.getElapsedTime().asSeconds();ftime = 0;}//......while(window.IsOpen()){//....for (it = listEnemy.begin(); it != listEnemy.end(); it++){window.draw((*it)->getSprite());timer(10); //задержка на 10 сек перед след итерацией//то есть отрисовкой}}Да и использовать глобальную переменную не камильфо… Какие будут идеи?
Ну по дефолту так программой и было записано, и не работало. Буду еще разбираться, но пока решение – полный путь.
Можно. Я уже разобрался. На будущее у кого будет такая проблема:
image source: писать полный путь к тайтлам в .tmx
-
АвторСообщения