易语言里有延迟、延时,模块里也有程序延时,超级延时,之类的命名,但多线程里的脚本的暂停和恢复,还涉及到内部解绑,这里采用UI通知的方式,开始真正的暂停,使用死循环,不去调用系统接口,减少系统资源的占用。


511遇见易语言多线程大漠多线程


大漠多线程脚本延时

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

    ' 开启后台
    线程信息 [序号].dm.EnableBind (1)
.如果真结束
 
延时 (时间)