以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [分享]暂停循环实例(公开源码)  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=78285)

--  作者:黄训良
--  发布时间:2015/12/6 12:45:00
--  [分享]暂停循环实例(公开源码)

   

   循环暂停,是非常实用的功能, lsy老师的“暂停循环实例”没有公开源码,因工作需要自己写吧!自己愚钝,花了半天的时间(不用MessageBox),经过n次测试才写了出来,核心代码只有47字。功能如下:

     循环【表A】,每循环一行就去执行一个任务,执行任务这个时间就暂停循环,收到任务结束的信息后,恢复循环!

优点:代码简洁,循环结束什么都不用去“销毁”。
缺点:循环期间CPU占用率在18%-25%,循环结束很快下降到正常水平。
要求:代码必须严谨(务必返回恢复循环的值),避免造成死循环!
应用:1、任务完成时间不太长的情况。2、暂停后面的代码执行。


(有10人需要就公开源码)  

 

 



以下内容只有回复后才可以浏览
[此贴子已经被作者于2015/12/15 12:56:44编辑过]

--  作者:freeants
--  发布时间:2015/12/6 13:04:00
--  
需要哈 ,多谢
--  作者:qianqian1530
--  发布时间:2015/12/6 13:42:00
--  
\'\'\'
Vars("Mark1") = True
If Vars("s") Is Nothing  Then
    Vars("s") = 1
End If
Dim Sum As Integer
Dim i As Integer
For i = Vars("s") To 100
    If Vars("Mark1")  Then
        Sum = Sum + i
    Else
        Vars("s") = i
    End If
Next

Output.Show(Sum)



暂停
Vars("Mark1") = False

--  作者:黄训良
--  发布时间:2015/12/6 14:04:00
--  
以下是引用qianqian1530在2015/12/6 13:42:00的发言:
\'\'\'
Vars("Mark1") = True
If Vars("s") Is Nothing  Then
    Vars("s") = 1
End If
Dim Sum As Integer
Dim i As Integer
For i = Vars("s") To 100
    If Vars("Mark1")  Then
        Sum = Sum + i
    Else
        Vars("s") = i
    End If
Next

Output.Show(Sum)



暂停
Vars("Mark1") = False

这个已测试过,是再次启动循环,并非暂停。
--  作者:大红袍
--  发布时间:2015/12/6 14:12:00
--  

Do Until vars("开关") = False

    \'Application.DoEvents

Loop


--  作者:gua12gua
--  发布时间:2015/12/6 14:59:00
--  
楼主分享呗
--  作者:shenyl0211
--  发布时间:2015/12/6 15:04:00
--  
好注意,谢分享
--  作者:游
--  发布时间:2015/12/6 15:06:00
--  
以下是引用gua12gua在2015/12/6 14:59:00的发言:
楼主分享呗

难得啊,第一次看见老兄回帖没用 ddddd


--  作者:游
--  发布时间:2015/12/6 15:12:00
--  

楼主:

  个人感觉,这种用例,用循环暂停不如用队列。用变量通知一个执行一个。

 


--  作者:黄训良
--  发布时间:2015/12/6 18:25:00
--  
以下是引用在2015/12/6 15:12:00的发言:

楼主:

  个人感觉,这种用例,用循环暂停不如用队列。用变量通知一个执行一个。

 

分享一下吧!