现公司做一个项目,有一部分是用vb6.0开发的,本人以前从没有用过vb,请问各位大虾,比如我要实现一个这样的功能:窗口上有两个按钮,一个Start,一个Stop。我想点Start的时候执行一个操作,点Stop的时候停止这个操作。请问是否得用多线程,在java中很容易实现,可是在vb中呢?最好给我一个小例子。

解决方案 »

  1.   

    不用多线程也可以
    在Start里的代码加DoEvents,放弃控制权就可以了
      

  2.   

    Option Explicit
    Private isBusy As Boolean
    Private Sub Command1_Click()
        isBusy = True
        While isBusy = True
            Text1 = Val(Text1) + 1
            DoEvents
        Wend
    End SubPrivate Sub Command2_Click()
        isBusy = False
    End Sub
      

  3.   

    知道怎么用了。学了好多东西阿。刚查到说有一个API函数GetInputState能提高DoEvents的性能,但不知道是如何在程序中声明的。谁能帮我贴出来啊,我这没有msdn.
      

  4.   

    不要用GetInputState,CPU占用N高。还不如用Sleep(1)来降低CPU占用率呢!!!
      

  5.   

    Q: 用了doevents速度太慢了怎么办? 
    A:  doevents的代价是速度变慢,但要程序响应又不得不用 
        其实doevents语句允许任何应用程序执行相关事件,而不仅仅是你自己的程序,所以变得很慢. 
        可以让它响应本程序事件动作,需要用到api函数GetInputState 
        例如用: If GetInputState() Then DoEvents '来代替doevents可使循环运行更快 其实我也觉得用了后速度变慢了。不知道有什么好办法吗?用Sleep(1)好像会更慢吧?
      

  6.   

    Public Declare Function GetInputState Lib "user32" Alias "GetInputState" () As Long
      

  7.   

    对于现在大部分以G来计的CPU来说Doevents造成的这点速度延迟算什么,但是GetInputState在两个程序同时运行时(两个程序同时有Doevents),就不光是速度慢了,内存和CPU的占用情况简直是恐怖啊。
    而使用Doevnets的死循环如果执行的语句不多的话,CPU占用率会持续上升至100%,只有在Doevents前加上Sleep才能避免这种现象,而最小的Sleep运行函数就是Sleep(1),顺便说一句,C里边就是这么处理的。
      

  8.   

    楼上
    她本来就嫌慢,你还让她sleep?
    她要的不是响应,是速度,嘿嘿~