Предотвратить таймер от сбора мусора - PullRequest
0 голосов
/ 31 марта 2019

Я запускаю таймер в начале моей программы с:

GetWorldTimerManager().SetTimer(MyTimerHandle, this, &AMyGameMode::SetNextMatchState, 1.0f, true, 0.0f);

MyTimerHandle - это закрытая переменная в моем GameMode.

Вызывает соответствующую функцию каждую секунду и проверяет, должна ли игра перейти в следующее состояние. Это прекрасно работает, пока я не начну уничтожать актеров со сцены. С этого момента обратный вызов больше не вызывается. Мой вызов уничтожения выглядит так:

Destroy(Cast<AMyPlayerState>(gameState->PlayerArray[i])->MyUnitList.Pop());

Так что я не удаляю таймер. А поскольку «Уничтожить (...)» помечает только актера, который должен быть уничтожен GC в ближайшем будущем, я предполагаю, что GC также удаляет мой таймер, что, очевидно, не то, что я намеревался.

Так как я могу предотвратить, чтобы ГХ уничтожил мой таймер (если это причина, почему таймер перестает работать)?

1 Ответ

1 голос
/ 31 марта 2019

Возможно, вы загружаете новую карту? Загрузить карту, путешествия ...

Потому что это создаст новый Мир с собственным диспетчером таймеров, что приведет к отключению таймера.

В этом случае вы должны использовать Диспетчер таймера из Экземпляра игры вместо Мира

...