易语言里有延迟、延时,模块里也有程序延时,超级延时,之类的命名,但多线程里的脚本的暂停和恢复,还涉及到内部解绑,这里采用UI通知的方式,开始真正的暂停,使用死循环,不去调用系统接口,减少系统资源的占用。
511遇见易语言多线程大漠多线程
大漠多线程脚本延时
.版本 2
.子程序 脚本延时, , , 用来控制脚本的暂停恢复
.参数 序号, 整数型
.参数 时间, 整数型
.局部变量 死循环, 逻辑型
死循环 = 真
' 判断是否有结束
.如果真 (线程信息 [序号].是否结束)
' 解绑,退出之前,必须在本线程内解绑
线程信息 [序号].dm.UnBindWindow ()
退出线程 (0)
.如果真结束
' 判断是否暂停
.如果真 (线程信息 [序号].是否暂停)
线程信息 [序号].线程状态 = #线程状态_暂停
多线程_异步通知UI (#通知类型_更新, 序号)
' 如果暂停时继续可以前台操作,
线程信息 [序号].dm.EnableBind (5)
' 开始真正的暂停,使用死循环,不去调用系统接口,减少系统资源的占用
.判断循环首 (死循环)
' 没有暂停
.如果真 (线程信息 [序号].是否暂停 = 假)
线程信息 [序号].线程状态 = #线程状态_正在运行
多线程_异步通知UI (#通知类型_更新, 序号)
' 开启后台
线程信息 [序号].dm.EnableBind (1)
跳出循环 ()
.如果真结束
' 已经结束
.如果真 (线程信息 [序号].是否结束)
' 退出前,一定要在本线程内解绑
线程信息 [序号].dm.UnBindWindow ()
退出线程 (0)
.如果真结束
延时 (1)
.判断循环尾 ()
.如果真结束
' 再次判断线程状态是否正在运行,
.如果真 (线程信息 [序号].线程状态 ≠ #线程状态_正在运行)
线程信息 [序号].线程状态 = #线程状态_正在运行
多线程_异步通知UI (#通知类型_更新, 序号)
' 开启后台
线程信息 [序号].dm.EnableBind (1)
.如果真结束
延时 (时间)