Private Sub Sub1()
  Dim i as long
  do while true
     i=i+1
     doSomeThing
     DoEvents
  loop
end Sub
Private Sub Sub2()
  Dim j as long
  do while true
     j=j+1
     doSomeThing
     DoEvents
  loop
end Sub
如果sub1及sub2先后运行起来,这两个Sub的关系是什么?
A. i=1,j=1;i=2,j=2;i=3,j=3......i=n,j=n........
B. i=1,i=2,i=3......i=n.....;j=1,j=2,j=3.......j=n
C. 其他结果?请各位出招.......

解决方案 »

  1.   

    DoEvents的作用是释放CPU资源给Windows的其它任务,从而防止了进程的假死现象,但这个任务必须是Windows层面的。它不是将CPU资源释放给本进程的其它线程。合理的使用DoEvents是能加快程序响应的,效果上类似于多线程。
    再者,VB对多线程的支持不佳这是总所周知的,所以DoEvents对VB而言很有用处。
      

  2.   

    就楼主举的两个例子,Sub1是不会释放CPU资源给Sub2的
      

  3.   


    那有什么办法可以使两个SUB并行执行?
    比如放到timer?
      

  4.   

    这两个SUB不会同时运行的,如果精心设计一些事件,两个SUB可以交替运行.你只要理解了什么是doevents就明白了,一个事件过程中超过两个doevents使用将导致程序不可控或程序执行流程不可意料.最终导致不可意料的结果.
      

  5.   


    Option Explicit
    Dim i As Long
    Dim j As Long
    Private Sub Form_Load()
        Timer1.Interval = 1
        Timer1.Enabled = True
    End SubPrivate Sub Timer1_Timer()
        If i < 100000 Then i = i + 1
        If j < 50000 Then j = j + 1
        DoEvents
    End Sub
      

  6.   

    B. i=1,i=2,i=3......i=n.....;j=1,j=2,j=3.......j=n考虑多线程。