UE5 C++(十五)— TimerHandle(定时器)的使用

定时器(Timer) 可用于执行延迟类型的操作,或让某些操作在一段时间内重复执行。

设置定时器

定时器的设置只需三步即可完成:声明定时器句柄 FTimerHandle、定义执行函数、设置定时器,其中前两步是第三步的预备工作。

声明FTimerHandle

首先是声明定时器句柄 FTimerHandle,代码实现如下:

#include "TimerManager.h"

UCLASS()
class DEMO_API AMyCharacter : public ACharacter, public IMyInterface
{
   
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	AMyCharacter();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent *PlayerInputComponent) override;
	//声明定时器变量
	FTimerHandle TimerHandle;
	void TimerFunction();
};

定义执行函数

void AMyCharacter::TimerFunction()
{
   
	UE_LOG(LogTemp, Warning, TEXT("TimerFunction"));
	GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("TimerFunction"));
}

设置定时器

注意:不可以在Actor的构造函数中设置定时器

// Called when the game starts or when spawned
void AMyCharacter::BeginPlay()
{
   
	Super::BeginPlay();

	// 设置定时器 5秒后执行TimerFunction函数,每5秒执行一次
	GetWorldTimerManager().SetTimer(TimerHandle, this, &AMyCharacter::TimerFunction, 5.f, true);
}

SetTimer() 各个参数的作用如下:

  • InOutHandle:定时器绑定的句柄,如果该句柄已指向其他定时器,则取消这个其他定时器;
  • InObj:调用执行函数的对象;
  • InTimerMethod:定时器所执行的函数;
  • InRate:函数执行的时间间隔,如果<=0,则清除现存定时器,即 InOutHandle 所绑定的定时器;
  • InbLoop:该定时器是否循环,若不循环则只执行一次;
  • InFirstDelay:从设置定时器到执行定时器的时间间隔,若<0,则使用 InRate 代替。

编译之后,运行打印结果
在这里插入图片描述

清除定时器

设置定时器后,一定不要忘了清除定时器。这就像申请了资源,一定要归还一样。取消定时器的话,建议直接使用ClearTimer(),其用法示例如下:


	if (TimeHandle.IsValid())
	{
   
		GetWorldTimerManager().ClearTimer(TimerHandle);
	}

清除定时器可在 Actor 的 EndPlay() 函数中执行,但在其他地方也是可以的,只是不要忘记清除定时器。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 19:48:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 19:48:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 19:48:03       87 阅读
  4. Python语言-面向对象

    2024-01-16 19:48:03       96 阅读

热门阅读

  1. 动态表达式树(Expression Tree)来实现动态筛选

    2024-01-16 19:48:03       56 阅读
  2. 【MySQL】MySQL 专项练习

    2024-01-16 19:48:03       50 阅读
  3. 【精选】samba服务的下载和使用 (超详细)

    2024-01-16 19:48:03       55 阅读
  4. chrome浏览器并发限制及其突破手段

    2024-01-16 19:48:03       45 阅读
  5. Day27- 贪心算法part01

    2024-01-16 19:48:03       51 阅读
  6. 49-定时器,倒计时,清除定时器,延迟器

    2024-01-16 19:48:03       59 阅读
  7. cesiumlab切片通过arcgisjs加载

    2024-01-16 19:48:03       55 阅读
  8. MySQL虚拟列提高检索效率

    2024-01-16 19:48:03       51 阅读