+ -
当前位置:首页 → 问答吧 → VB Sleep垃圾等待函数

VB Sleep垃圾等待函数

时间:2010-09-21

来源:互联网

其实主要是一个关于SLEEP的问题。
SLEEP使用后则程序就处于一个全局停顿状态,程序不会接受任何新事件。所以我一直感觉SLEEP确实是一个很垃圾的等待函数。
VB code

'所以多数情况下在VB过程中等待我是这么写的

  DO
    Doevents
    if XXX then exit do
  LOOP


'但是一般这样使用循环会超占CPU,所以后来改为这样

DO
 Doevents
 Sleep 1
LOOP

'但是我感觉效果也不好,因为SLEEP总会去让其他事件也停止响应。


'我只想这样

DO
  '在过程中不费CPU,不会影响本程序其他时间的产生的等待上1秒钟,这样也不行么?
  if XXX then exit do
LOOP




真的深恶痛绝SLEEP这个垃圾函数。难道学了VB的真的只有去转行学VC 或者.NET?

难道这个就是VB的瓶颈么?谁帮忙看看

作者: tk600158   发布时间: 2010-09-21

VB code
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long) '声明

作者: lxq19851204   发布时间: 2010-09-21


好啊,你自己写个编程语言出来,搞一个好的开发平台,我们也好跟你沾沾光。

作者: of123   发布时间: 2010-09-21

你用定时器啊。

把执行过程从流程上拆为多个过程,再由定时器事件进行调用。

作者: myjian   发布时间: 2010-09-21

Sleep在VC中常在新开的线程里用,他会让整个线程处于停止状态,CPU会在指定的时间内完全不去处理那个线程的东西。而在VB中,因为多线程的方式不稳定,所以通常都是在单线程下跑,如果用了Sleep来让线程停止,那么就会有卡死的现象(即使在VC里单线程这么跑也会有这种现象),所以才会出现你所说的问题。
在VB中要想等待指定的时间,有VB的方法可以实现,不能按照VC的开发方式思考。就像VC开发当中,很多东西不能用VB的开发方式思考一样。在VB中可以这样实现类似的功能。
VB code

Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
    Dim STime1 As Long
    Dim STime2 As Long
    STime1 = GetTickCount
    VB_Sleep 1000
    STime2 = GetTickCount
    MsgBox STime1 & " - " & STime2
End Sub

Private Sub VB_Sleep(ByVal dwMilliseconds As Long)
    Dim SaveTime As Long
    Dim NowTime As Long
    Dim IsWait As Long
    IsWait = 0
    SaveTime = GetTickCount
    Do
       DoEvents
       NowTime = GetTickCount
       If NowTime - SaveTime >= dwMilliseconds Then
          IsWait = 1
       End If
    Loop While IsWait = 0
End Sub

作者: SupermanKing   发布时间: 2010-09-21

热门下载

更多