Threading - 线程和定时器
EasyBot 提供了完整的定时器功能和线程同步机制,支持延时执行、间隔执行以及多线程环境下的互斥锁操作。
threading 命名空间
threading 命名空间包含定时器和互斥锁相关的函数。
setTimeout()
创建一个定时器,在指定的延迟后执行回调函数。
语法: threading.setTimeout(callback: () => void, delay: number): number
参数:
callback- 要执行的回调函数delay- 延迟时间(毫秒)
返回值: 定时器ID
示例:
const timerId = threading.setTimeout(() => {
logger.info("3秒后执行");
}, 3000);
setInterval()
创建一个间隔定时器,每隔指定的时间执行回调函数。
语法: threading.setInterval(callback: () => void, interval: number): number
参数:
callback- 要执行的回调函数interval- 间隔时间(毫秒)
返回值: 定时器ID
示例:
const intervalId = threading.setInterval(() => {
logger.info("每5秒执行一次");
}, 5000);
clearTimeout()
清除定时器。
语法: threading.clearTimeout(timerId: number): boolean
参数:
timerId- 定时器ID
返回值: 是否成功清除
示例:
const timerId = threading.setTimeout(() => {
logger.info("这不会执行");
}, 1000);
const success = threading.clearTimeout(timerId);
logger.info(`清除成功: ${success}`);
clearInterval()
清除间隔定时器。
语法: threading.clearInterval(timerId: number): boolean
参数:
timerId- 定时器ID
返回值: 是否成功清除
示例:
const intervalId = threading.setInterval(() => {
logger.info("定期执行");
}, 1000);
// 10秒后停止
threading.setTimeout(() => {
const success = threading.clearInterval(intervalId);
logger.info(`停止间隔定时器: ${success}`);
}, 10000);
createMutex()
创建一个互斥锁 (Mutex),用于在多线程环境中同步访问共享资源。
语法 1: threading.createMutex(name: string): Mutex
语法 2: threading.createMutex(initiallyOwned: boolean, name: string): Mutex
参数:
initiallyOwned- (可选) 是否初始为已占用状态,默认为falsename- 互斥锁名称,用于标识系统范围内的互斥锁
返回值: Mutex 对象
示例:
const mutex = threading.createMutex("my-global-lock");
Mutex 接口
Mutex 对象提供了线程同步的原语。
WaitOne()
阻塞当前线程,直到收到信号或超时。
语法 1: WaitOne(): boolean (无限期等待)
语法 2: WaitOne(millisecondsTimeout: number): boolean
语法 3: WaitOne(millisecondsTimeout: number, exitContext: boolean): boolean
参数:
millisecondsTimeout: 等待的毫秒数,-1表示无限等待。exitContext: 是否在等待前退出同步上下文(通常用不到,默认为 false)。
返回值:
true: 成功获取到锁。false: 超时未获取到锁。
ReleaseMutex()
释放当前线程对互斥体的占用。
语法: ReleaseMutex(): void
注意: 只有拥有锁的线程才能释放锁,否则会抛出异常。