zoukankan      html  css  js  c++  java
  • VB中实现延时(等待)的几种方法

    在程序流程中经常要延时一段时间后再继续往下执行,在VB中常用的有以下几种方法(因为Timer控件打乱了程序的流程所以一般不用它):
    1.使用Windows API函数Sleep
    新建一个工程,添加一个TextBox控件和一个CommandButton控件,再将以下代码复制到代码窗口
    '声明:
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Private Sub Command1_Click()
    Text1 = "sleep begin"
    Sleep 3000 'ms
    Text1 = "sleep end"
    End Sub
    按F5执行,按下Command1按钮,程序停止执行,3秒钟内不对用户的操作做出反应,并且Text1里的内容并没有发生改变.这是怎么回事呢?原来,Sleep函数功能是将调用它的进程挂起dwMilliseconds毫秒时间,在这段时间内,此进程不对用户操作做出反应,程序中虽然将Text1的Text属性改成Sleep begin,但还没等完成对屏幕的更新进程就被挂起了,对用户来说程序象是死机一样。所以这种方法虽然简单,但并不适用.

    2.使用Timer()函数
    这是用的最多的一种方法,也是在VB联机手册中所推荐的。添加一个CommandButton控件,再将以下代码添加到代码窗口中:

    Private Sub Command2_Click()
    Dim Savetime As Single
    Text1 = "Timer begin"
    Savetime = Timer '记下开始的时间
    While Timer < Savetime + 5 '循环等待
    DoEvents '转让控制权,以便让操作系统处理其它的事件。
    Wend
    Text1 = "Timer ok"
    End Sub

    这种方法虽然也很简单,但却有有一个致命缺陷,那就是Timer函数返回的是从午夜开始到现在经过的秒数。所以Timer返回的最大值也只是60*60*24-1秒,如果从一天的23:59:58秒开始计时等待5秒,那么程序会永远地循环下去。要进行改良,就要加上判断是否又开始了新的一天,那岂不是太麻烦.下面给大家推荐另一个Windows API函数.
    3.使用Windows API函数timeGetTime()
    timeGetTime函数没有参数,返回值是从开机到现在所经历的毫秒数,这个毫秒数是非周期性递增的,所以不会出现Timer()函数出现的问题,而且这种方法的精确性高于上一种方法。添加一个CommandButton控件,再将以下代码添加到代码窗口中:
    '声明
    Private Declare Function timeGetTime Lib "winmm.dll" () As Long

    Private Sub Command3_Click()
    Dim Savetime As Double
    Text1 = "timeGetTime begin"
    Savetime = timeGetTime '记下开始时的时间
    While timeGetTime < Savetime + 5000 '循环等待
    DoEvents '转让控制权,以便让操作系统处理其它的事件。
    Wend
    Text1 = "timeGetTime end"
    End Sub
    按F5执行程序,按这几个按钮,您可以感受一下这几种方法的优劣.
  • 相关阅读:
    Trapping Rain Water
    Construct Binary Tree from Preorder and Inorder Traversal
    Flatten Binary Tree to Linked List
    Permutations II
    Unique Paths II
    Path Sum II
    Unique Binary Search Trees II
    evdev module-----uinput.py
    evdev module-----events.py
    evdev module-----device.py
  • 原文地址:https://www.cnblogs.com/ainima/p/6331575.html
Copyright © 2011-2022 走看看