Option Explicit
Dim bExit As Boolean
Private Sub Command1_Click()
  Do While Not bExit
    Command1.Caption = Time
    DoEvents
  Loop
End SubPrivate Sub Command2_Click()
  Do While Not bExit
    Command2.Caption = Time
    DoEvents
  Loop
End SubPrivate Sub Form_Unload(Cancel As Integer)
 bExit = True
End Sub每次点击command1时,command2就停,vb功能真弱

解决方案 »

  1.   

    因为Click()事件没有执行结束,当然不会执行另一个Click()事件了,
    这是死循环.
    你这个功能用两个Timer控件可以实现.
    或者用多线程.
      

  2.   

    在循环中加了DoEvents点击command1时,command2中的循环让出了处理权,当然是这样的了!不知楼主要什么功能?
      

  3.   

    如果你要两上command都显示时间,在个Timer控件里写代码
      

  4.   

    所以我现在往.net转。至少,VB.NET有了完整的多线程支持。
      

  5.   

    这就是你们的不对了,我们都知道vb不如vc功能那么强,但至少你要举个适当的例子再说。这明明就是没有用正确的方法,同样的我也可以说“vc中窗体中的控件还要updata一下才能更新显示太低极了",如果这样你不笑我么?
    再说线程,我单位里vb部门的就是在vb中用多显程,没遇到过什么不能就觉得问题呀。
    下次说xx不好之前现想想自己真的理解它么?(主意是理解,不是了解)
      

  6.   

    用Timer就OK的拉。偶是准VB程序员,你不许说VB不好的拉。
      

  7.   

    在编程中最好是不要用到死循环,这是一个不好的习惯!
    你这个问题用Timer控件就很容易解决了!这用VB是很容易就能解决的问题,你怎么能说VB弱呢?
      

  8.   

    实际上可以互相补缺,VB 设计界面等简单,大的运算或硬件操作可交给C++来处理 然后VB调用DLL。
      

  9.   

    兄弟,想实现这个吗,简单得要死啦。我照晒你的代码来写,包行得通,不过你要及时给分呀。这点也控不掂,还用在广东捞!
    Option Explicit
    Dim bExit As Boolean
    dim com1ok as boolean
    dim com2ok as boolean
    Private Sub Command1_Click()
        if com1ok=false then 
          com1ok=true
        else
          com1ok=false
        end if
      Do While Not bExit
        if com1ok then Command1.Caption = Time
        if com2ok then command2.caption=time
        DoEvents
      Loop
    End SubPrivate Sub Command2_Click()
        if com2ok=false then 
          com2ok=true
        else
          com2ok=false
        end if
      Do While Not bExit
        if com1ok then Command1.Caption = Time
        if com2ok then command2.caption=time
        DoEvents
      Loop
    End SubPrivate Sub Form_Unload(Cancel As Integer)
     bExit = True
    End Sub实现功能,点击某一个command,那一个便开始显示时间,两个都点击,两个都显示;某一个再次点击,显示停止。如何?这是你想要的吧,给分呀。
    其实解决这个问题的方案很多很多,VB真强大。
      

  10.   

    赫赫,在vb版里骂vb,送你俩字儿:找死!
      

  11.   

    我第一个学的是VB,你要是真懂API编程什么的就不会说这个了
    是你技术不行,楼主,抱歉
      

  12.   

    楼主那四个三角不知是怎么得的,我才两个,不到一分钟就把问题搞定了。不是我高明,而是VB太高明了。归根到底,这个楼主连DOEVENTS的工作机理、线程等基本概念没有弄清楚。我也骂过微软,因为她不让我在控件设计时使用end语句,其实现在想想,那是VB为我们想得太周到了,不想让我们设计出的东西老会出错。
      

  13.   

    我也知道多线程和timer能解决,只不过我有小于10ms执行的圈圈,timer不能达到我的要求,多线程我就不提了(vb的先天不足我也不想后天去补),本想挑挑大家的斗志,没想招来一堆砖头。
    还是谢谢大家!
    mvp lihonggen0请注意:
    我是需要同时从视频卡采集多路视频图像到vga,通过loop我能在第一时间知道视频帧采集完毕(每分钟30帧)并处理(用Timer明显有丢帧现象),单个loop好像处理不过来,所以想通过多个loop,请教有何高见?
    顺便说句,我用vb实现的loop循环采集数据cpu竟然占用80%,同样的实现vc才5%不到,高人指点?
      

  14.   

    如果不是多CPU的系统的话,开多线程跟单线程没什么太大的区别,如果你要求10ms以下的计时的话,可以参考:
    http://www.applevb.com/art/timing.htm
    利用里面提到的多媒体计时器。但是你需要确保你的一个执行要可以在10ms以内完成。BTW:在做类似视频采集这方面的程序时,VB不是强项,建议选择VC。
      

  15.   

    TechnoFantasy(www.applevb.com)
    这个人好象我刚才在哪见过?
    哦!就是漏了个数组的那人吧?
      

  16.   

    TechnoFantasy(www.applevb.com)
    你的demo运行完1分钟后非法?
    无法看到到底哪个准啊?