登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

miaozk2006

点滴积累与收藏:关于技术,关于生活

 
 
 

日志

 
 

vb中空操作(等待)的指令、延时方法  

2012-07-28 18:14:25|  分类: 编程-VB |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、vb中空操作(等待)的指令是什么
━━━━━━━━━━━━━━━━━━━━━━━━━━
请调用windows api的sleep函数

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
例如:
Call Sleep(1000) '程序等待1秒
━━━━━━━━━━━━━━━━━━━━━━━━━━
用"时间控件"也可以。
timer1.Interval = 10000 '10000毫秒后触发

Private Sub Timer1_Timer()
    '(你要执行的操作)
    timer1.Interval = 0 '如果你不想重复执行,使时间控件不触发
End Sub
━━━━━━━━━━━━━━━━━━━━━━━━━━

还有个方法是用循环 , 这对多线程的程序, 要等其他的线程运行完成后再向下运行可以如下

runok = False               'runok=false表示暂不向下运行
While runok = False
    If (可以向下执行了) Then
        runok = trueend
    End If
    DoEvents               '这句别忘了,否则你的系统就象死机一样,CPU全被占了,系统不会进行其他操作
Wend
(后面继续执行的程序)
注意
doevents 不是空操作命令,而是让系统做其他操作的命令.
━━━━━━━━━━━━━━━━━━━━━━━━━━
'延时函数
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Public Function MyDelayTime(tm As Long) As Long
    Dim tm1 As Long, tm2 As Long
    tm1 = timeGetTime
    Do
        tm2 = timeGetTime
        If (tm2 - tm1) > tm Then Exit Do
        DoEvents
    Loop
    MyDelayTime = tm2 - tm1
End Function

--------------------------------------------------------------------------------

二、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
    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执行程序,按这几个按钮,您可以感受一下这几种方法的优劣。

摘自:网络整理



VB相关



VB6 中善用ByRef 提升速度

[vb] Set 语句

VB_Format自定义格式

VB如读取内存地址

vb FindwindowEx的用法实例

进制转化进10进制数

收藏:如何获取当前已经打开的IE对象(VB6代码)

DXInput中键码的转换(VB6.0代码)

如何在VB6.0里动态使用具有事件的对象

[vb]格式输出Format函数

读取和写入WindowsINI文件

简述UTF8编码原理及其文本文件的读写技术【转】

VB中的文件操作

VB中的文件操作文档

vb 中拷贝文件

VB反跟踪技术点滴

VB共享软件防破解设计技术初探(二)

VB共享软件防破解设计技术初探(三)

VB共享软件防破解设计技术初探(一)

RTF文件格式【转】

VB压缩技术

[vb]FSO对象模型在VB中的应用

VB 窗体实现文件拖拽获取路径方法

VB:注册表的读写

vb中空操作(等待)的指令、延时方法

VB让控件可以当标题栏拖动

FSO对象新建、打开、保存文件

获取网关IPMAC VB源码

VB文件关联

vb获得本地和远程的MAC地址(网卡地址)

VBShellExeCute的应用

VB打开网址方法大全

vb简单控制音量大小及静音的方法

拖动无边框窗体(VB6代码)

VB使用FileSystemObject对象写文件

VB 从注册表中删除项及其某个值

vb 字符串转为数字和判断字符串是否是数字字符串【转】

vb按热键启动应用程序

VB的坐标系统综述

VB利用API函数来处理文件

关于VBShellShellExecute的总结与记录

[vb]On Error GoTo 0On Error resume区别

[vb]On Error 语句

记录一下:在菜单上添加自绘图形的例子(VB6代码)

vbfindwindow的疑惑

[vb]FindWindow使用方法

常用文件类[转,无法运行通,待调试]

[vb]url utf-8编码

VB中的Unicode Ansi 格式

VB中的format格式化函数

VB中字符串匹配的多种方式

VB抓图

vb目录文件操作的三种方法-2

vb目录文件操作的三种方法-1

vb使用open方法读写文件

VBMD5加密模块

VB 超简单的屏幕截图代码

vb以类名或窗口标题查找句柄并关闭

VB将配置保存到EXE本身(生成EXE木马程序)

VB 调用腾讯截图控件CameraDLL.dll

VB6.0中怎么实现escapeunescape

vb求任意两线交点

VB中调用Windows API的注意事项[VB知识库]

VB 一个获得自己外网IP 地址的程序代码

VB程序中实现IP地址子网掩码网关DNS的更改[]

VB 中应用FSO 对象模型介绍(摘自网络)

[] VbFSO 对象的介绍

VB 画坐标轴

VB 二进制文件的操作

[VB]BMPJPG

VBKeyCode常数用法

vb实时曲线的绘制和保存


更多精彩>>>

  评论这张
 
阅读(1807)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018