路径:支持库 → 多线程支持库。
硬约束
- 扁平命令;含「多线程操作」与「线程池操作」两类。
- 任务回调参数支持无参、标量、数组及混用——不必是数组。
- 禁止在界面事件里调用
等待线程/等待所有线程/等待线程池/等待任务。 - 禁对主/UI/当前线程
暂停线程/强制结束线程。 - 回写 UI 必须在界面线程(用完成/空闲事件)。
- 主窗口关闭时自动强制结束尚未回收的工作线程与线程池。
快速开始
函数 批量工作() {
整数 句柄数组[]
整数 i
循环(10, i) {
数组添加(句柄数组, 启动线程(&任务, i))
}
等待所有线程(句柄数组)
}
函数 任务(整数 n) {
输出(n)
}
函数 按钮1.单击(整数 x, 整数 y) {
启动线程(&批量工作) // 立即返回,界面不卡
}
多线程操作
本分类共 6 条。
启动线程
- 签名:
整数 启动线程(&任务, i, 结果数组) - 说明:新建线程执行指定函数并立即返回句柄(不等待)。参数可为标量、数组或混用,不必是数组。
- 参数一│函数名: 建议 &函数名;可跟若干参数(标量按值、数组按引用)
强制结束线程
- 签名:
逻辑 强制结束线程(整数 线程句柄) - 说明:强制终止工作线程并关闭句柄。
- 参数一│线程句柄: 启动线程 返回的句柄
暂停线程
- 签名:
逻辑 暂停线程(整数 线程句柄) - 说明:暂停指定工作线程。
- 参数一│线程句柄: 启动线程 返回的句柄
等待所有线程
- 签名:
通用 等待所有线程(数组 线程句柄数组) - 说明:等待多个线程全部执行完毕。
- 参数一│线程句柄数组: 推荐用 数组添加 收集启动线程 返回值
等待线程
- 签名:
逻辑 等待线程(整数 线程句柄) - 说明:等待指定线程执行完毕。
- 参数一│线程句柄: 启动线程 返回的句柄
继续线程
- 签名:
逻辑 继续线程(整数 线程句柄) - 说明:恢复被暂停的工作线程。
- 参数一│线程句柄: 启动线程 返回的句柄
线程池操作
本分类共 11 条。
关闭线程池
- 签名:
逻辑 关闭线程池(整数 池句柄) - 说明:停止接新任务,排空后结束工作线程并释放池句柄。
- 参数一│池句柄: 创建线程池 返回值
创建线程池
- 签名:
整数 创建线程池(0) - 说明:创建固定工作线程数的线程池。省略或 0 表示按 CPU 核数(至少 1)。
- 参数一│线程数: 可选;0 或省略=自动;建议不要过大
取消排队任务
- 签名:
逻辑 取消排队任务(整数 池句柄, 整数 任务序号) - 说明:取消仍在排队、尚未开始执行的任务。已开始或已完成返回假。
- 参数一│池句柄: 创建线程池 返回值
- 参数二│任务序号: 投递任务 的返回值
取线程池工作中数
- 签名:
整数 取线程池工作中数(整数 池句柄) - 说明:返回正在执行中的任务数(通常 ≤ 工作线程数)。无效句柄返回 -1。
- 参数一│池句柄: 创建线程池 返回值
取线程池排队数
- 签名:
整数 取线程池排队数(整数 池句柄) - 说明:返回尚未被工作线程取走的任务数。无效句柄返回 -1。
- 参数一│池句柄: 创建线程池 返回值
取线程池线程数
- 签名:
整数 取线程池线程数(整数 池句柄) - 说明:返回创建时确定的工作线程数。无效句柄返回 -1。
- 参数一│池句柄: 创建线程池 返回值
投递任务
- 签名:
整数 投递任务(池, &混用, i, "10", 结果数组) - 说明:将函数入队由池内空闲线程执行,立即返回。参数支持无参、标量、数组及混用,不必是数组。
- 参数一│池句柄: 创建线程池 返回值
- 参数二│函数名: 建议 &函数名;其后可跟标量(按值)和/或数组(按引用)
等待任务
- 签名:
逻辑 等待任务(整数 池句柄, 整数 任务序号) - 说明:等待指定任务完成或被取消。UI 线程调用时会泵消息,但仍勿在按钮事件里用。
- 参数一│池句柄: 创建线程池 返回值
- 参数二│任务序号: 投递任务 的返回值
等待线程池
- 签名:
逻辑 等待线程池(整数 池句柄) - 说明:等待池内排队与执行中的任务全部完成。
- 参数一│池句柄: 创建线程池 返回值
置线程池完成事件
- 签名:
逻辑 置线程池完成事件(池, &任务完成) - 说明:每个任务在工作线程跑完后,于界面线程调用回调。可改控件标题等。传 0 清除。
- 参数一│池句柄: 创建线程池 返回值
- 参数二│回调: &函数名,形参固定 函数 名(整数 任务序号);传 0 清除
置线程池空闲事件
- 签名:
逻辑 置线程池空闲事件(池, &全部完成) - 说明:池由忙变空闲(排队与执行中均为 0)时,于界面线程调用无参回调。传 0 清除。
- 参数一│池句柄: 创建线程池 返回值
- 参数二│回调: &函数名,无参 函数 名();传 0 清除
推荐写法(不卡界面)
按钮里只启动,重活放函数里;大批量优先线程池 + 空闲/完成事件。
整数 池
函数 只算标量(整数 n) {
// 重活在工作线程
}
函数 全部完成() {
标签1.标题 = "全部完成"
关闭线程池(池)
}
函数 按钮1.单击(整数 x, 整数 y) {
池 = 创建线程池(0)
置线程池空闲事件(池, &全部完成)
整数 i
循环(100, i) {
投递任务(池, &只算标量, i)
}
// 立刻返回 —— 绝不在这里 等待线程池
}
要点:
- 标量参数按值;数组参数按引用写回(写
整数 结果数组[])。 - 下标从 0 起;
循环(次数, i)中i为0..次数-1。 - 池句柄与线程句柄不可混用。
- 完成回调形参:
函数 名(整数 任务序号);空闲回调无参。
易错对照
| 错误 | 正确 |
|---|---|
| 按钮里同步等待上千线程 | 等待放进被启动的函数,或用线程池事件 |
| 池句柄当线程句柄 | 两类句柄不可混用 |
| 在工作线程直接改控件 | 用完成/空闲事件回 UI 线程 |