首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

哪里出有关问题了?为什么一句句运行可以,一起运行就有点有关问题?另外可否设置按钮退出死循环

2012-03-08 
哪里出问题了?为什么一句句运行可以,一起运行就有点问题?另外可否设置按钮退出死循环?哪里出问题了?为什么

哪里出问题了?为什么一句句运行可以,一起运行就有点问题?另外可否设置按钮退出死循环?
哪里出问题了?为什么一句句运行可以,一起运行就有点问题?

Private   Sub   Command3_Click()
        Call   doloop
End   Sub

Public   Sub   doloop()
        Call   collect
        iRecord   =   i      
    Do   While   True
        Sleep   1000
        Call   collect
        iagain   =   i
        If   iagain   =   iRecord   Then
                ledDI(iagain).Value   =   1       '为1时灯亮(第三方控件)
                ledDO(iagain).Value   =   1       '同上
                Timer1.Enabled   =   True
                Exit   Do
        Else
                iRecord   =   iagain
        End   If
    Loop
End   Sub

Public   Sub   collect()
        i   =   0
        Do   Until   ZT8403_DIBit(m_cardNO,   i   +   1)   =   1
                i   =   i   +   1
                If   i   =   m_chCount   Then   i   =   0
        Loop
End   Sub

Private   Sub   Timer1_Timer()
        If   ZT8403_DIBit(m_cardNO,   iagain   +   1)   =   0   Then
                ledDI(iagain).Value   =   0         '灯灭,一句句运行可以实现,但一起运行灯   _
                ledDO(iagain).Value   =   0         '要等到下一信号进来灯才灭,换一灯亮.
                Timer1.Enabled   =   False
                Call   doloop
        End   If
End   Sub


因为程序一直处于循环状态,退出程序比较困难,有没有什么办法解决?能否设置一按钮退出循环?谢谢!

[解决办法]
首先要解决在循环中能响应你点击BUTTON 的问题//你可以在循环中增加释放资源的语句DOEVENTS,这样当执行这个语句的时候就能让出一点时间让系统响应其他消息,比如你的中断消息
其次,你要在循环中增加一个判断,如果是假就继续循环,如果是真就BREAK,跳出循环
这个判断是真是假就由你的CLICK按钮来设置,就这样,代码自己写吧

[解决办法]
在循环里设置一个停止标记。
dim bStop as boolean
bstop=false
Do While True
if bstop then exit do
doevents
loop

Private Sub Command4_Click()
bstop=not bstop
End Sub
[解决办法]
设置DOEVENTS,并用一个变量检测是否应该退出,这个变量在BUTTON CLICK中可以被改变.
这是一种解决办法, 实际上完全看你的需求到底怎样, 比如, DOEVENT 会在你程序执行中引导CPU做其他事情, 而且降低速度, 这个对你的设计是否有影响?
防止影响太大的一个方法是, 在一个循环中, 增加一层for next循环, 在这个循环出来时执行DOEVENTS, 这样就可以大大减少对速度的影响. 或用TIMER来控制时间, 每秒钟执行一次DOEVENTS, 也是一种常用的办法.
[解决办法]
在死循环里加上DoEvent语句
------解决方案--------------------


Private Sub Command3_Click()
bStop = False
Call doloop
End Sub

Private Sub Command4_Click()
bStop = True
End Sub

Public Sub doloop()
Call collect
iRecord = i
Do While True
DoEvents
If bStop Then Exit Do
Sleep 1000
Call collect
iagain = i
If iagain = iRecord Then
ledDI(iagain).Value = 1 '为1时灯亮(第三方控件)
ledDO(iagain).Value = 1 '同上

Timer1.Enabled = True
Exit Do
Else
iRecord = iagain
End If
Loop
End Sub

Private Sub Timer1_Timer()
If ZT8403_DIBit(m_cardNO, iagain + 1) = 0 Then
ledDI(iagain).Value = 0 '灯灭,一句句运行可以实现,但一起运行灯 _
ledDO(iagain).Value = 0 '要等到下一信号进来灯才灭,换一灯亮.
Timer1.Enabled = False
DoEvents
Call doloop
End If
End Sub

热点排行