那么如果我的处理过程中有 doevents, 又如何? (这时是不是可以并发执行?)
如果在这个过程中定义了局部变量,那么内存区是共享的吗?
分数少,可以再加.

解决方案 »

  1.   

    我的处理过程最后几行是msgbox index    '控件的indexwhile true doeventswend现在我观察到的现象是,我点击第一个,弹出0,再点击第二个,弹出1,谁能叙述一下整个事件响应
    的过程及顺序,谢谢!分数不是问题.
      

  2.   

    当然是立刻响应,这里不存在顺序的问题。一旦事件发生就会调用事件处理函数。看看
    下面的程序:Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Dim xx As IntegerPrivate Sub command1_Click(Index As Integer)
        While True
            command1(Index).Caption = Str(xx)
            Sleep 200
            xx = xx + 1
            DoEvents
        Wend
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        End
    End Sub
      

  3.   

    to TechnoFantasy(www.applevb.com) :
    好像不对啊,如果你把 sleep 200 改为 sleep 50000 ,你会发现,好像是上一个结束后,下一个
    才执行的. 顺便说一句,sleep的时间单位是毫秒.你是不是设的时间太短,造成错觉?
      

  4.   

    to TechnoFantasy(www.applevb.com) :通过你的例子,我发现它们似乎是抢占式的.当事件发生时,如果前一个还没有执行完,会立刻终止,去响应下一个. 哪位高手能解释一下啊,谢谢.  
      

  5.   

    试过了TechnoFantasy(www.applevb.com)的方法,加到5秒时,好像是顺序响应,大概是sleep的问题,我做了一个sleep的函数,有一点立即执行,试试看Sub sleep(a As Long)'a 为秒
    Dim t As Date
    t = DateAdd("s", a, Now)
    Do While Now < t
       DoEvents
    LoopEnd Sub
      

  6.   

    好了,我弄清楚了.原因在doevents 上.它允许系统中断本过程,去响应其他的事件.内存区不共享
    顺序为,  响应第一个事件 ------------>被中断去响应第二个事件 -------->第二个事件响应完成后再继续执行第一个的剩余部分.多个的情形以此类推.
    谢谢大家,特别感谢 TechnoFantasy(www.applevb.com) 和 ttyp(懒人) .