在一个程序中,我调用了一个函数,但是有的时候,我想在他运行的时候终止该函数的执行,该怎么做呢?
哪位指导一下,谢谢了

解决方案 »

  1.   

    在被调用函数中使用DoEvents语句。
    Global BreakCall As BooleanFunction MyCall1() ......    While BreakCall        '函数语句
            .......
            .......        DoEvents    WendEnd Function通过在其它的代码部分改变 BreakCall 的值,可以控制函数运行或结束BreakCall = True   '允许函数语句部分无限次数执行
    BreakCall = False  '函数语句部分本次执行完后便退出函数一个突出的问题是,在 While...Wend 执行期间,一般CPU占用率会占到100%。
      

  2.   

    可以用一个共有的变量来结束函数运行。不过我倒要问问了。你所谓的终止函数执行,是多线程?多线程才开其他函数以线程方式运行。否则用VB你只有一个线程。除非你的函数里有doevents的命令,否则,你运行了这个函数,还指望这个函数运行半截的时候还能响应你的其他事件?如果函数里有Doevents就好办了,后面加上一个公共变量判断,比如true是继续执行,false终止跳出你就可以通过其他事件响应来实时修改这个公共变量以达到你的目的了。不过我劝告你哦。doevents可不是那么好玩的。小心点玩哦
      

  3.   

    谢谢指导我说的是单线程的
    to boiciy
    你说doevents不是那么好玩的,这句话如何理解?
    他会导致不确定的结果?
      

  4.   

    参考:
    在vb程序执行时,怎么设置一个按钮,使程序运行先暂停,然后在单击该按钮后,又能够继续执行呢?
    设置一个公用变量,比如 userPause。在你的循环开始前,置 false 值;在按下这个按钮时,将它的值反覆(如果是 false,变成 true;反之也一样)
    在循环中检查键盘或鼠标动作(用API函数GetInputState()),如果GetInputState()=true,执行 doevents 语句。这时按钮的 click 事件将会执行,userPause 变量的值也会改变;然后在 doevents 语句后面判断 userPause ,如果是 true,就不停送出 doevtnts 语句,反之表示用户又按了一次按钮,继续循环。以上是思路,程序大概的结构如下:private Declare Function GetInputState Lib "user32" () As Long
    Private userPause As Boolean
    ...private sub command1_click()
    userPause=not userPause
    end subprivate sub 你的循环代码()
    userPause=false'你的代码
    ....do while ... '循环
    if GetInputState() then '按下键盘/鼠标
    doeventsdo while userPause '按下的是目标按钮,并且将 userPause 变成了 true
    doevents '不停的送出doevents,直到用户再次按下按钮将 userPause=false
    loop
    end if....
    loop...
    end sub
      

  5.   

    VB只要不Createthread就一定是单线程必须用Doevents其实这个就是一个跳转语句,留下断点,跳转到主程序等待一下事件队列,有就执行队列,然后再返回断点。当然鬼才知道响应事件的子程序是什么东西呢,当然要小心点玩喽。不果响应事件的子程序都是你自己编的。别作茧什么缚就成
      

  6.   

    doevent只是能让程序有个响应
    但是效率低下
    我试过采集程序使用doevent
    速度降低一半