---
title: "定时器模块 | open.mp"
description: "本篇前瞻文章展示了 open.mp 中定时器模块的改进，在保持向后兼容的同时，引入了一个更灵活、高效的 API。"
canonical: https://omp.itsneufox.com/zh-CN/blog/timers
language: zh-CN
---

# 定时器模块

2019年5月22日 · 阅读时间约2分钟

Y\_Less

本篇前瞻文章展示了 open.mp 中定时器模块的改进，在保持向后兼容的同时，引入了一个更灵活、高效的 API。

注意

以下内容已过时，不反映 open.mp 的当前状态。本文发布于此仅作归档用。

这是我们对 open.mp 中定时器模块所做改进的一次前瞻性展示：

```c
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：

```c
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, ...}`，但支持更多标签。
