定时器模块
· 阅读时间约2分钟
本篇前瞻文章展示了 open.mp 中定时器模块的改进,在保持向后兼容的同时,引入了一个更灵活、高效的 API。
注意
以下内容已过时,不反映 open.mp 的当前状态。本文发布于此仅作归档用。
这是我们对 open.mp 中定时器模块所做改进的一次前瞻性展示:
native SetTimer(const func[], msInterval, bool:repeat) = SetTimerEx;
native SetTimerEx(const func[], msInterval, bool:repeat, const params[], GLOBAL_TAG_TYPES:...);
native KillTimer(timer) = Timer_Kill;
// 创建定时器
native Timer:Timer_Create(const func[], usDelay, usInterval, repeatCount, const params[] = "", GLOBAL_TAG_TYPES:...);
// 终止定时器
native bool:Timer_Kill(Timer:timer);
// 返回下一次调用前的剩余时间。
native Timer_GetTimeRemaining(Timer:timer);
// 获取剩余调用次数(0 表示无限)。
native Timer_GetCallsRemaining(Timer:timer);
// 获取 `repeatCount` 参数。
native Timer_GetTotalCalls(Timer:timer);
// 获取 `usInterval` 参数。
native Timer_GetInterval(Timer:timer);
// 将距离下次调用的剩余时间重置为 `usInterval`。
native bool:Timer_Restart(Timer:timer);
前两个函数仅用于向后兼容,其余的是改进后的 API:
native Timer:Timer_Create(const func[], usDelay, usInterval, repeatCount, const params[] = "", GLOBAL_TAG_TYPES:...);
func- 作用显而易见,即指定要调用的函数。usDelay- 同样显而易见,表示首次调用前的延迟时间(以微秒计)。usInterval- 指定第一次调用后,将 usDelay 重置为何值。例如,如果你希望每小时执行一次定时器,而现在是上午 8:47,调用方式应为Timer_Create("OnTheHour", 780 SECONDS, 3600 SECONDS, 0);repeatCount- 与旧函数仅支持"一次"或"永久"不同,此参数指定调用函数的次数。"一次"为1,500表示调用 500 次后停止,(与旧 API 相反)0表示"永久执行"。GLOBAL_TAG_TYPES- 类似于{Float, ...},但支持更多标签。