防止计时器进行垃圾回收

Prevent Timer from Garbage Collection

本文关键字:计时器      更新时间:2023-10-16

我在程序开始时启动一个计时器:

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

MyTimerHandle是我的游戏模式中的一个私有变量。

这会每秒调用相应的函数,并检查游戏是否应该进入下一个状态。在我开始摧毁现场的演员之前,它工作得很好。从那时起,不再调用回调。我的销毁调用如下所示:

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

所以我不会删除计时器。由于"Destroy(...("仅标记在不久的将来被GC销毁的actor,因此我假设GC也会删除我的计时器,这显然不是我的意图。

那么我怎样才能防止GC破坏我的计时器(假设这是原因,为什么计时器停止工作(?

您是否正在加载新地图?加载地图,旅行...

因为这会创建一个新的世界,它有自己的新计时器管理器,这将导致你的计时器被禁用。

在这种情况下,您应该使用游戏实例而不是世界中的计时器管理器