定时器

上文已经实现的定时器,但是在需要在主线程中可能无法满足需求https://blog.csdn.net/allen807733144/article/details/94014639

于是我们有了下面代码:

class Timer
	{
	public:
		void run()
		{
			auto it = m_vecTimer.begin();
			for (; it != m_vecTimer.end(); it++)
			{
				if (!std::get<3>(*it))
					continue;

				int en = clock() - std::get<2>(*it);
				if (en >= std::get<0>(*it))
				{
					std::get<1>(*it)();
					if (std::get<4>(*it))
					{
						std::get<2>(*it) = clock();
					}
					else
					{
						std::get<3>(*it) = false;
						m_vecTimer.erase(it--);
					}
				}
			}
		}

		/**
		* @brief 设置定时器
		* @param1: 时间(ms)
		* @param2: 回调
		* @param3: 循环(默认一次)
		*/
		void setTimer(int time, std::function<void()> fun, bool loop = false)
		{
			m_vecTimer.push_back(std::make_tuple(time, fun, (int)clock(), true, loop));
		}
	private:
		/**
		* @brief
		* @param1 总时间(单位:ms)
		* @param2 回调
		* @param3 开始时时钟时间
		* @param4 定时器开始/结束标志
		* @param4 是否循环
		*/
		typedef std::vector<std::tuple<int, std::function<void()>, int, bool, bool>> TimerVec;
		TimerVec m_vecTimer;
	};

这里需注意,run需在主线程循环中每帧调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值