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

news2024/11/19 3:23:19

文章目录

    • 设置定时器
      • 声明FTimerHandle
      • 定义执行函数
      • 设置定时器
    • 清除定时器

定时器(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() 函数中执行,但在其他地方也是可以的,只是不要忘记清除定时器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1371446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

固态硬盘只显示一半容量怎么办?

有时候我们会发现固态硬盘只显示一半容量&#xff0c;那么为什么会出现这个问题呢&#xff1f;下面我们就一起来了解一下。 为什么硬盘没有显示满容量&#xff1f; 在Windows 11/10/8/7中硬盘容量显示错误&#xff0c;有很多原因会导致这种情况发生。以下总结了一些常见的原因…

PHP开发日志 ━━ 不同方法判断某个数组中是否存在指定的键名,测试哪种方法效率高

我们可以用isset($arr[a]) 或者 array_key_exists(a, $arr) 来判断a键名是否存在与$arr数组。 那么这两种方式哪个运行速度快呢&#xff1f; 不多废话了&#xff0c;现在我们写一段代码来测试一下&#xff1a; $array [a > 1, b > 2, c > 3];$start microtime(tru…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷③

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 模块一 …

《Shader开发实战》-笔记

一、初识游戏图形 1、什么是渲染&#xff1f; 渲染实际上就是创建图像的过程&#xff0c;在渲染过程中创建的图像被称为渲染或者帧&#xff0c;该图像&#xff08;帧&#xff09;以每秒多次在计算机屏幕上进行呈现&#xff0c;即帧率。 负责渲染图像&#xff08;帧&#xff09…

美国证券交易委员会 X 账户被黑,引发比特币市场震荡

Bleeping Computer 网站消息&#xff0c;威胁攻击者成功“占领”了美国证券交易委员会的 X 账户&#xff0c;并发布一条关于批准比特币 ETF 在证券交易所上市的虚假公告。 帖子原文&#xff1a;今天&#xff0c;美国证券交易委员会批准比特币 ETF 在注册的国家证券交易所上市&a…

华为认证 | HCIP-Storage V5.5 认证正式发布!

华为认证存储高级工程师HCIP-Storage V5.5&#xff08;中文版&#xff09;自2023年12月28日起正式在中国区发布。 01 发布概述 基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技术架构&#xff0c;华为公司打造了覆盖ICT领域的认证体系&#xff0c;包含ICT基础…

自动化生产线-采用工业机器人比人工有哪些优势?

工业机器人相对于人工具有一些显著的优势&#xff0c;这些优势使它们在制造和生产领域得到广泛应用。以下是工业机器人相对于人工的一些主要优势&#xff1a; 1、精度和一致性&#xff1a; 机器人可以执行高精度的操作&#xff0c;确保产品的质量和规格一致&#xff0c;而且不容…

如何加密U盘数据?U盘数据加密软件怎么选?

U盘作为最常用的移动储存设备&#xff0c;是很多人储存数据的重要工具。而普通的U盘不具备保护数据的功能&#xff0c;很容易导致数据泄露。因此&#xff0c;我们需要使用专业的U盘加密软件来加密保护U盘数据。那么&#xff0c;U盘数据加密软件该怎么选择呢&#xff1f;下面我们…

golang中的循环依赖

作为 Golang 开发人员&#xff0c;您可能遇到过导入周期。Golang 不允许导入循环。如果 Go 检测到代码中的导入循环&#xff0c;则会抛出编译时错误。在这篇文章中&#xff0c;让我们了解导入周期是如何发生的以及如何处理它们。 导入周期 假设我们有两个包&#xff0c;p1并且…

windows10+ubuntu20.04双系统中,ubuntu系统显示home空间不足的扩容方法

实际上网上有两种扩容方法&#xff0c;除了本文的方法外&#xff0c;另一种是在使用启动U盘打开试用ubuntu&#xff0c;应该涉及到nvidia显卡驱动问题故未采用。另一种即本文。 最开始安装双系统时内存分配没有分配好&#xff0c;给ubuntu系统分配的空间较小,导致了后来的的问…

分布式锁3: zk实现分布式锁5 使用中间件curator-interprocessmutex可重入锁

一 curator的说明 1.1 curator的说明 curator是netflix公司开源的一个zk客户端。对Zookeeper提供的原生客户端进行封装&#xff0c;简化了Zookeeper客户端的开发量。Curator解决了很多zookeeper客户端非常底层的细节开发工作&#xff0c;包括连接重连、反复注册wathcer和Node…

玩转Mysql 四(MySQL逻辑架构与数据引擎)

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 一、MySQL逻辑架构 1、从Oracle收购MySQL后&#xff0c;MySQL逻辑架构受Oracle影响&#xff0c;MyS…

C++与Typescript的区别

目录 一、C类模板和函数模板 1.类模板 2.函数模板 二&#xff0c;Typescript 的泛型声明 1.泛型函数 2.泛型类 为什么C和Typescript语言中主张模板和泛型 一、C类模板和函数模板 在C中&#xff0c;类模板和函数模板允许你为多种数据类型编写通用的代码。这就像每个人都有…

14:00进去,14:05就出来了,面试问的有点变态。。

刚从小厂出来&#xff0c;没想到在另一家公司我又寄了。 在这家公司上班&#xff0c;每天都要加班&#xff0c;但看在钱给的比较多的份上&#xff0c;也就不太计较了。但万万没想到一纸通知&#xff0c;所有人不准加班了&#xff0c;不仅加班费没有了&#xff0c;薪资还要降40…

Jarvis步进法(Jarvis March)凸包算法

Jarvis步进法&#xff08;也称为包裹法&#xff09;&#xff1a; Jarvis步进法是一种逐步选择凸包顶点的算法。从点集中选择一个起始点&#xff0c;然后在每一步中选择下一个顶点&#xff0c;该顶点是当前点集中与当前点形成的线段上&#xff0c;极角最小的点。该算法的时间复杂…

【深度学习:数据增强】计算机视觉中数据增强的完整指南

【深度学习&#xff1a;数据增强】计算机视觉中数据增强的完整指南 为什么要做数据增强&#xff1f;等等&#xff0c;什么是数据增强&#xff1f;数据增强技术数据增强的注意事项和潜在陷阱什么时候应该做数据增强&#xff1f;类不平衡的数据增强那么我应该选择哪些转换呢&…

图像分类任务的可视化脚本,生成类别json字典文件

1. 前言 之前的图像分类任务可视化&#xff0c;都是在train脚本里&#xff0c; 用torch中dataloader将图片和类别加载&#xff0c;然后利用matplotlib库进行可视化。 如这篇文章中&#xff1a;CNN 卷积神经网络对染色血液细胞分类(blood-cells) 在分类任务中&#xff0c;必定…

如何在一张图里同时显示两个三维图

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3Dplt.rcParams["font.sans-serif"] ["SimHei"]# 正确显示中文和负号 plt.rcParams["axes.unicode_minus"] False# 创建数据 x np.random.rand(50…

就是要你懂网络--一个网络包的旅程

原文地址:https://plantegg.github.io/2019/05/15/%E5%B0%B1%E6%98%AF%E8%A6%81%E4%BD%A0%E6%87%82%E7%BD%91%E7%BB%9C–%E4%B8%80%E4%B8%AA%E7%BD%91%E7%BB%9C%E5%8C%85%E7%9A%84%E6%97%85%E7%A8%8B/ 写在最前面的 我相信你脑子里关于网络的概念都在下面这张图上&#xff0c…