Полезное

Мы Вконтакте

Discord канал

#
1 ... 45678
Аватара пользователя
Пользователь
Сообщения: 2230
Цитата:
Он точно сделает все, что мне надо и не зависнет или сбросит?

если памяти хватит то сделает... в это время все будет висеть и ждать пока процесс не выполнится...
пример с бесконечной рекурсией - пока памяти хватает она работает, вся система в этот момент висит...
если конца рекурсии не будет то вылетит в итоге с ошибкой... какой-то...
сброса никакого не предусмотренно.

а вообще для таких вещей используют многопоточность.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 54
Dany писал(а):
А теперь представь, что у тебя сложные вычисления будут выполняться каждый кадр "коннект к серверу или запись на диск". Само по себе звучит странно, нет?!


Есть же такие штуки, ну вроде if-ов и bool-ов, не?))) Я могу вызвать код однократно и только при необходимости повторить.
Цитата:
если памяти хватит то сделает... в это время все будет висеть и ждать пока процесс не выполнится...

Т.е. кадр в игре остановится, игра как-бы зависнет, а в это время будет происходить моя тяжелая операция?
Цитата:
а вообще для таких вещей используют многопоточность.

Есть какаие-то встроенные возможности движка? Или на голом С++ городить? С семафорами и критическими секциями...
Аватара пользователя
Пользователь
Сообщения: 237
Цитата:
Есть же такие штуки, ну вроде if-ов и bool-ов, не?))) Я могу вызвать код однократно и только при необходимости повторить.

Ну, если в твоем понимании разумности ловить каждый тик событие и проверять булами это круто, то делай.
Хотя нормальной практикой является запуск события по необходимости а не проверка состояния наступления события каждый тик.
Правда понимание логичности у каждого свое. Для кого-то путь из Новосиба в Омск через Владивосток логичнее.

Цитата:
Т.е. кадр в игре остановится, игра как-бы зависнет, а в это время будет происходить моя тяжелая операция?

Нет не остановится, просто каждый тик будет поступать событие и каждый раз будет запускаться еще один процесс. В итоге ты получишь 100500 одновременно работающих процессов что и вызовет зависание (может даже без вылета).

Цитата:
Есть какаие-то встроенные возможности движка?

Да, есть. Таймеры.
Аватара пользователя
Пользователь
Сообщения: 54
Цитата:
Да, есть. Таймеры.

Это они?
https://docs.unrealengine.com/en-US/Pro ... ure/Timers
Он создает новый поток или выполняется(встраивается) в существующем(их)? Мне без разницы, главное, могу ли я смело обращаться к экторам на сцене, как-то влиять на них напрямую из таймера и т.д.?
Аватара пользователя
Пользователь
Сообщения: 237
Цитата:
Он создает новый поток или выполняется(встраивается) в существующем(их)?

Под каждый таймер свой поток.
Если глубже копнуть, то выяснится что это по-сути часть общего потока, но с технической точки зрения таймер может контролировать отдельный поток.
Можешь обращаться к кому угодно и влиять, естессно..
Аватара пользователя
Пользователь
Сообщения: 54
Цитата:
Можешь обращаться к кому угодно и влиять, естессно..

И что-то тяжелое или требовательное к времени не будет останавливать основной поток (игру)?
Аватара пользователя
Пользователь
Сообщения: 237
rachok писал(а):
И что-то тяжелое или требовательное к времени не будет останавливать основной поток (игру)?


Будет, если время вычисления будет по продолжительности приближено ко времени кадра.
Если это сохранение, то можно внутри таймера поставить контроль потока.
Например тебе нужно сохранить локацию, на которой 100500 объектов.
Ты запускаешь таймер сохранения и он через интервалы (0.3 секунды например или же даже по тику) сохраняет каждый объект. По факту это параллельный процесс и не сильно грузит потому как игровой Тик не перегружается.
А если всю карту разом сохранять за один проход массива сохраняемых объектов, то таймер не нужен и тогда все встанет пока игра не будет сохранена...
Как-то так..
Аватара пользователя
Пользователь
Сообщения: 54
Цитата:
А если всю карту разом сохранять за один проход массива сохраняемых объектов, то таймер не нужен и тогда все встанет пока игра не будет сохранена...
Как-то так..

Я могу запустить такую вещь 1 раз в Tick (да-да, на if и bool)?
Я ж могу создать отдельный эктор, отспавнить его, а у него будет одна единственная функция, с проверкой, не запускали ли ее. Если ее не запускали, то в ней он будет находить все 100500 объектов и записывать их координаты и повороты.
Будет остановка?
Или остановки не будет - движок создаст отдельный поток и т.п...?
Аватара пользователя
Пользователь
Сообщения: 2230
таймер выполняется в мейн треде(основной поток)...
в блупринтах вообще нет инструментов для многопоточности... на с++ инструменты уже есть.
движек не создает отдельных потоков сам... неважно чем ты его нагрузишь.

если говорить о тике то - в основном потоке пока логика текущего тика не выполнится следующий тик не наступит.
если об евенте каком-то, в т.ч. и таймеры, то он все равно попадает в основной поток и пока его логика не выполнится следующий тик не наступит.

при много поточности мейн-тред будет выполняться независимо от других потоков, тоесть без фризов.
_________________
we need to go deeper
Последний раз редактировалось Snake 17 май 2018, 15:45, всего редактировалось 2 раз(а).
Аватара пользователя
Пользователь
Сообщения: 2230
а многопоточность на с++ инфа благополучно гуглится, 4 разных способа точно находятся.
_________________
we need to go deeper


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница