|
Век живи - век тупи
|
|||||||||||||||||||||
Как остановить поток std::thread ? Есть ли более подходящие аналоги?19.07.2022, 11:02. Показов 12668. Ответов 45
Метки нет (Все метки)
Итак, в моей игре код разделён на два потока, основной - рендеринг и прочее, второй - расчёт физики.
Вот фрагменты самого кода
0
|
|||||||||||||||||||||
| 19.07.2022, 11:02 | |
|
Ответы с готовыми решениями:
45
Почему при Thread.Abort закрывается программа? Как остановить поток?
Как удалить зависший std::thread::detach поток без внедрения туда дополнительной контролирующей логики |
|
Век живи - век тупи
|
||||||||||||||||
| 20.07.2022, 10:13 [ТС] | ||||||||||||||||
|
К сожалению, ещё нет. Сейчас буду гуглить
Добавлено через 2 часа 19 минут Итак, вот решение проблемы: Данный поток нужно запускать с самого начала выполнения программы (с main()), и не трогать его вообще. Поскольку данный поток представляет из себя цикл, теперь его код выглядит так
Механизм заморозки:
Добавлено через 2 минуты Ошибка точно не в синхронизации потому что физика читает и изменяет, а рендер только читает. Они физически, простите за каламбур, не могли конфликтовать, да и баги были бы только в отрисовке
0
|
||||||||||||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 20.07.2022, 10:30 | ||
|
0
|
||
|
Век живи - век тупи
|
|
| 20.07.2022, 10:46 [ТС] | |
|
Походу, я не до конца разобрался.
То есть, если ошибка возникает в результате использования и изменения одних и тех же объектов разными потоками, то это в любом случае связано с синхронизацией? Просто в той статье был пример чисто на int'ах, когда при попытке увеличить одну переменную двумя потоками, оба потока считывали неизменённое значение, потому могло получиться и 1, и 2.
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 20.07.2022, 10:55 | |
|
0
|
|
|
4904 / 2697 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||
| 20.07.2022, 12:40 | |||
|
Вам нужно синхронизировать ваши процессы. Добавлено через 22 минуты Вообще, если вы не пишете что-то очень тяжелое типа 3д шутера, вам бы не лезть пока в потоки. Запутаетесь, угрохаете тонну времени, результата не увидите и разочаруетесь. ) Забейте пока, пишите в один поток.
0
|
|||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 20.07.2022, 13:15 | |
|
0
|
|
|
Век живи - век тупи
|
|
| 20.07.2022, 13:38 [ТС] | |
|
Эта простейшая 2д головоломка, в которой из движущихся частей только особые блоки, да сам игрок. Мб. особые частицы, но их пока не добавил. Максимум, насколько такой рендер ошибётся, так это на 2 пикселя
Добавлено через 4 минуты Сразу извиняюсь за качество, видеокарта сдохла. Без OBS графика отличная. Знаете ли, такой профан, как я, вряд-ли будет писать какой-то сложный 3д шутер Добавлено через 1 минуту https://youtu.be/wbHTAwgMguk Никаких лагов, никаких видимых ошибок рендера Добавлено через 4 минуты Прикол в том, что физика прорабатывается быстрее рендера. На самой карте, даже на одном из сложнейших уровней, одновременно двигается не более 4 объектов. И то со скоростью чуть быстрее черепахи. Не думаю, что ряд [1,1,1,2,2,2...] сильно отличается от [1,1,1,1,2,2...]. Тут всё весьма медлительное
0
|
|
|
фрилансер
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,419
|
|
| 20.07.2022, 13:39 | |
|
tankoman228, для такой игры не нужна многопоточность )
0
|
|
|
Век живи - век тупи
|
|
| 20.07.2022, 13:46 [ТС] | |
|
https://youtu.be/FX6ZpVABbDk
Сорян, не ту ссылку кинул! Да и игра у меня частично испытательный полигон. Просто захотел разобраться, потому как на одном из калькуляторов альфа-тестеров оно умудрилось залагать, надо же учиться оптимизации
0
|
|
|
4904 / 2697 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||
| 20.07.2022, 21:30 | |||
|
Вообще, пока не упрётесь в производительность -- забейте на потоки. Единственное, подо что можно сделать отдельный поток это звук. И то спорненько. Попробуйте сделать упор на качество кода. Посмотрите самый популярный паттерн ECS - Entity Component System. Это даст вам гораздо больше возможностей в виде более гибкого кода, чем мультитрединг дал бы производительности. Добавлено через 19 секунд
0
|
|||
|
Век живи - век тупи
|
||||||||||||||||
| 21.07.2022, 07:58 [ТС] | ||||||||||||||||
|
Это лишь малая его часть) Хотя самым сложным были блоки гравитации и провода с электричеством, всё равно ушло немало времени.
Про отдельный поток для звука: оно уже реализовано в самой графической библиотеке (SFML), так что над этим почти не парюсь. Недавно начал переписывать весь код, а то даже блоки были реализованы не через полиморфизм, а через банальный массив, цикл for и switch. Что касается физики, она там максимально примитивная (в противном случае это либо неиграбельно, либо очень странно дёргается). Координаты объекта меняются в одно действие, а вот куда и насколько - высчитывается через вспомогательные переменные. Тут в любом случае максимальная ошибка - задержка позиции в один тик.
0
|
||||||||||||||||
|
4904 / 2697 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||
| 21.07.2022, 19:23 | ||||
|
Популярность приобретает Data-Driven Design, в котором наследование, в общем-то, не нужно. Наследование в принципе применять надо крайне осторожно. Только в крайних случаях. Предпочитайте аггрегацию наследованию. А как у вас выглядит основной цикл? Еще раз скажу. Посмотрите на паттерн ECS - Entity Component System. Очень хорошая штука.
1
|
||||
|
4904 / 2697 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|
| 21.07.2022, 22:57 | |
|
Пардон, это называется не Data Driven Design, a Data Oriented Design.
![]() Это такая довольно старая концепция, когда дизайнят опираясь на процессинг данных в конкретном окружении (платформе), как в противоположность ориентации на бизнес-модели. Самый пример это паттерн ECS, когда отходят от сущностей типа Игрок, Блоки, Противники и оперируют сущностями типа Координаты, Скорость, Физика, Спрайты. Что позволяет существенно улучшить кэш-мисы на большинстве современных архитектур и сделать систему значительно более гибкой при изменениях.
1
|
|
|
Just Do It!
|
||
| 21.07.2022, 23:19 | ||
|
можно и сверху его в ООП завернуть. про data-driven design тут я почитал. ничего особенного, выглядит просто, как конфиг. ну, и ваще ООП это парадигма, а data-driven design это приём или подход в рамках ООП'а. ладно, спасибо, я понял.
0
|
||
|
Неэпический
|
|
| 21.07.2022, 23:33 | |
|
1
|
|
|
Век живи - век тупи
|
||||||||||||||||
| 22.07.2022, 06:59 [ТС] | ||||||||||||||||
|
Может в следующем проекте я попробую что-то другое, но сейчас мне для этого придётся не то, чтобы переписывать весь код, а вообще изучать дофига всего. А бета-версию я планирую выпустить уже в следующем месяце, ибо код теперь куда лучше, да и из основной работы осталось переделать редактор, да уровни заново сделать
Что касается моего подхода, лишь бы работало и выглядело не криво (ну, чтобы не было запутавшимися наушниками). По идее, это вообще моя вторая игра, которая имеет реальный смысл. Код хоть и плохой, но мне бы с основами разобраться, о паттернах и не говорю. Система, реализованная в SFML включает в себя именно коллизию OBBvsOBB, к тому же без разрешения. Когда я заменил на свою, ничего не поменялось (но вот на слабом железе скорость стала повыше). Ну, а теперь основной цикл. Если вы стоите, сядьте, возможен пердечный систуп
Добавлено через 7 минут А, сорян, вот основной цикл
0
|
||||||||||||||||
|
фрилансер
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,419
|
||||||||||||||||||
| 22.07.2022, 07:40 | ||||||||||||||||||
|
1)
0
|
||||||||||||||||||
|
Век живи - век тупи
|
|
| 22.07.2022, 07:51 [ТС] | |
|
do while 0 и правда удобнее. Когда буду приводить код в порядок перед публикацией на гитхаб исправлю
Добавлено через 32 секунды { } не работает(
0
|
|
| 22.07.2022, 07:51 | |
|
Как остановить thread.Sleep по клику Boost thread pool. Как остановить потоки? Как убить std::thread? Как остановить поток? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|