vb6实现程序延时的几种方法

2023-05-16

VB6在开发发贴机时,提交数据要用到延时程序,让程延时和等待.

从网上找了三种方法,三种方法以最后一种最好用.第一种如果不DOEVENTS的话,会使人感觉程序无反应一样



有以下方法:

1.使用Windows API函数Sleep
新 建一个工程,添加一个TextBox控件和一个CommandButton控件,再将以下代码复制到代码窗口
'声明:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
Text1.text = "开始时延3秒"
Sleep 3000
Text1.text = "时延3秒结束"
End Sub



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秒,那么程序会永远地循环下去。要进行改良,就要加上判断是否又开始了新的一天,那岂不是太麻烦.


// 上面一段是网上找的资料,其实可以不用timer函数,而是使用timer控件或者second函数,但是second函数如果是在第55秒后延长5秒的 话,也需要做到上面说的新的一分钟的判断,那也麻烦.当然,你也可以修改系统的时间,把他改在55秒前,总之还是麻烦。因此可以考虑用timer函数.创 建一个flag(标志),初始化flag为0,用timer每秒flag+1,当flag2=flag1+5的时候清零,根据条件判断执行下一命令 和 是否继续执行循环。大概的代码是:

dim flag1,flag2 as integer'该定义应该放在最最最上面,flag是全局

' 这部分可以放在command按下按扭的时候,或者onload
flag1=0
flag2=flag1+5

'timer1 部分
if flag2 <> flag1 then
flag1=flag1+1
print flag1
exit sub
else
'flag1=0
timer1.enabled=false
'先清零再做其他事情,包括中断 timer1.enabled=false等

end if
(代码可用)

上面的代码甚至可以一秒判断一次执行一个 不同的命令

if flag2 <> flag1 then
' new part
select case flag1
case 1: 'Express 1 while the first second
case 2: 'Express 2 while the second second
case 3: 'Express 3 while the third second
case 4: 'Express 4 while the fourth second
....
end select
flag1=flag1+1
exit sub

else
'flag1=0
timer1.enabled=false
' 先清零再做其他事情,包括中断 timer1.enabled=false等

end if



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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vb6实现程序延时的几种方法 的相关文章

随机推荐

  • 制作ROS移动机器人地盘

    制作ROS移动机器人地盘 摘要概述硬件需求车体设计电路设计程序设计PID控制轮速 摘要 本教程讲述如何利用扫地机轮子制作ROS移动机器人地盘 概述 原本不打算自己造轮子的 xff0c 但是网上的移动机器人地盘要么巨贵 对于学生党 xff0c
  • Lumia520刷安卓教程

    Date 2017 09 02 Author SuperDeveloper Descreption install android on luima 520 devices Email na1206 64 live com 警告 本教程只适
  • openwrt编译及第一个安装包教程

    Date 2017 03 14 Made SuperDeverloper Email na1206 64 live com Target For mt7688 based board 说明 xff1a 本人在学习过程中走了不少弯路 xff0
  • turtlebot3 Slam+nvigation仿真 ROS-lunar

    Date 2017 09 06 Author SuperDeveloper Description Slam simulation 说明 xff1a 1 Slam 初学笔记 xff0c 搭建slam仿真环境 xff1b 2 文章里的连接可能
  • 基于NVIDIA Xavier NX(ubuntu20.04)的Optitrack视觉定位 PX4+ros noetic(实物运行记录)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 xff1a 硬件准备两种界面化显示的方式无线连接有线连接 二 xff1a 软件准备1 远程登录软件 NoMachine2
  • ros机器人搭建总纲

    author xff1a superDeveloper date 2017 11 29 type note 近期准备搭建一个ROS机器人平台 xff0c 建立此博客记录搭建过程以及相关问题的解决办法 xff0c 作为笔记 xff0c 亦供相
  • ros gmapping 运行错误:Assertion 'beams<LASER_MAXBEAMS' failed>

    在使用真实激光器发布数据的时候 xff0c 出现了 Laser is mounted upward警告 xff0c 以及slam gmapping tmp buildd ros hydro openslam gmapping 0 1 0 2
  • realloc():invalid next size....错误

    Author SuperDeveloper Date 2018 1 2 在程序中使用了realloc函数 xff0c 更改结构体数组的大小 xff0c 错误代码如下 xff1a struct point span class hljs su
  • git简单命令笔记

    这是一篇关于git的使用笔记 xff0c 刚刚开始使用git 1 创建git本地仓库 xff1a 在你需要版本控制的项目Project根目录下右键点击Git Bash here执行git init 然后在该目录下生成 一个 git的隐藏文件
  • 源码编译Boost库的正确姿态

    源码编译Boost库的正确姿态 写在前面step 1 step 2 step 3 step4 写在前面 项目需要编译pcl库到arm平台 xff0c 交叉编译Boost xff0c Eigen3 Flann 之后再编译pcl库的时候总是报错
  • 第一讲、四旋翼的整体控制方案

    各位朋友 xff0c 我们工作室以后会长期更新一些飞行器干货 xff0c 本部分先介绍四旋翼的整体控制方案及相关设计 控制系统的框架如下 xff0c 借鉴网上来源图片 xff0c 传感器主要是姿态传感器 xff0c 对于大四轴而言 xff0
  • 网页中屏蔽鼠标右键、Ctrl+N、Shift+F10

    lt script language 61 34 Javascript 34 gt 屏蔽鼠标右键 Ctrl 43 N Shift 43 F10 F5刷新 退格键 屏蔽F1帮助 function window onhelp return fa
  • asp.net上一页下一页的部分代码

    lt asp linkbutton id 61 34 btnFirst 34 nclick 61 34 PagerButtonClick 34 runat 61 34 server 34 CommandArgument 61 34 0 34
  • Visual C# 编程操作Excel

    Visual C 编程操作Excel 2004 08 20 作者 xff1a 邵回祖 出处 xff1a ahcit http www yesky com SoftChannel 72342380468109312 20040819 1844
  • C#保存图片到IMAGE字段

    byte FileByteArray System IO MemoryStream ImageStream this sqlConnection1 ConnectionString 61 strConn try if this sqlCon
  • Android-蓝牙sco通话

    APP调用AudioManager startBluetoothSco frameworks base media java android media AudioManager java public void startBluetoot
  • Docker启动时的报错汇总

    八个Docker常见故障 https mp weixin qq com s 2GNKmRJtBGHhUyVBRbRgeA 八个Docker常见故障 报错一 xff1a error initializing graphdriver Docke
  • 利用JAVA操作EXCEL文件

    利用JAVA操作EXCEL文件 转载自 xff1a www csdn net 2003 年 1 月 在开源世界中 xff0c 有两套比较有影响的API可供使用 xff0c 一个是POI xff0c 一个是jExcelAPI 其中jExcel
  • 网站不能更新,错误 '80004005'

    网站数据转移到了另一台服务器 后台数据不能更新 因为程序原因也无错误信息报出 数据库为ACCESS数据库 初步估计是不是数据库只读或是NTFS的权限问题 对数据库目录添加EVERYONE和IIS的来宾帐户写入和修改权限 还是不能更新数据 最
  • vb6实现程序延时的几种方法

    VB6在开发发贴机时 提交数据要用到延时程序 让程延时和等待 从网上找了三种方法 三种方法以最后一种最好用 第一种如果不DOEVENTS的话 会使人感觉程序无反应一样 有以下方法 xff1a 1 使用Windows API函数Sleep 新