求助——vba如何实现并行程序设计
时间:2011-12-24
来源:互联网
问题基于这样的一个需求 我的一个数据处理的程序,处理数据需要相当长的时间,所以给程序添加了显示运行进度的窗体,进度用prograssbar实现了 现在我想在加个计时的功能 就是显示程序已经运行的时间 并结合运行进度和已运行时间 估算剩余时间 就像压缩的程序那样
问题就在对程序进行运行计时,一开始是想通过一个计时函数timecounter()实现,其中用DOENVENT 使得当窗体加载后 窗体上显示的时间正常 (这是主程序没有运行的时候) 因为窗体显示 不占用系统 所以doenvet 到了程序中设计的1秒时间后 自动返回 然后在下一个循环 总而言之 计时正常 但是一旦主程序运行了 因为程序运行要很久 一旦计时程序转让了控制权 主程序不会主动让出控制权在运行结束之前 所以计时就失败了
函数如下
VB code
如何实现对程序运行计时呢??? 是vba 没有timer控件 只有timer函数
算是并行的程序设计虽然相互之间不用交互只有触发和终止的关系,VB中如何并行程序设计呢
问题就在对程序进行运行计时,一开始是想通过一个计时函数timecounter()实现,其中用DOENVENT 使得当窗体加载后 窗体上显示的时间正常 (这是主程序没有运行的时候) 因为窗体显示 不占用系统 所以doenvet 到了程序中设计的1秒时间后 自动返回 然后在下一个循环 总而言之 计时正常 但是一旦主程序运行了 因为程序运行要很久 一旦计时程序转让了控制权 主程序不会主动让出控制权在运行结束之前 所以计时就失败了
函数如下
VB code
Sub time_Counter() ' 使用前要初始化 Costtime 和 打开计时器开关 TurnOff_clock ' 使用完 要关闭计时器开关 'Costtime 计数器 'TurnOff_clock 计时开关 Dim tempN As Integer Dim lastTimee As String PauseTime = 1 ' 设置暂停时间。 While TurnOff_clock <> 0 Start = Timer '---------------------------------晶振 Do While Timer < Start + PauseTime DoEvents ' 将控制让给其他程序。 Loop '---------------------------------晶振 '---------------------------------表盘 Costtime = Costtime + 1 If Costtime >= 60 Then Timee = Costtime \ 60 & ":" & Format(Costtime Mod 60, "00") Else Timee = "0:" & Format(Costtime, "00") End If formain.Labpast.Caption = "已运行:" & Timee 'timee 为计时输出变量 formain1.Label3.Caption = "已运行:" & Timee 'timee 为计时输出变量 '-------------------------计算剩余时间 tempN = (Costtime / (formain.gloProgressBar.Value + 1)) * 100 If tempN >= 60 Then lastTimee = tempN \ 60 & ":" & Format(tempN Mod 60, "00") Else lastTimee = "0:" & Format(tempN, "00") End If formain.Lablast.Caption = "估计剩余:" & lastTimee Wend End Sub
如何实现对程序运行计时呢??? 是vba 没有timer控件 只有timer函数
算是并行的程序设计虽然相互之间不用交互只有触发和终止的关系,VB中如何并行程序设计呢
作者: totola147 发布时间: 2011-12-24
事实上并需要timer
你所谓的主程序应该是就是应该就是过程或者函数,运行时间很长,意味着,你的函数体里有循环次数很多的循环,你只要在循环体里面加入,以下代码假设你的循环为for循环
for....
......
progressbar1.value=progressbar1.value+delta'进度增加值,假设使用进度条显示进度
doevents
next
就能得到需要的效果
你所谓的主程序应该是就是应该就是过程或者函数,运行时间很长,意味着,你的函数体里有循环次数很多的循环,你只要在循环体里面加入,以下代码假设你的循环为for循环
for....
......
progressbar1.value=progressbar1.value+delta'进度增加值,假设使用进度条显示进度
doevents
next
就能得到需要的效果
作者: worldy 发布时间: 2011-12-25
引用 1 楼 worldy 的回复:
事实上并需要timer
你所谓的主程序应该是就是应该就是过程或者函数,运行时间很长,意味着,你的函数体里有循环次数很多的循环,你只要在循环体里面加入,以下代码假设你的循环为for循环
for....
......
progressbar1.value=progressbar1.value+delta'进度增加值,假设使用进度条显示进度
doevents
next
就能得到……
事实上并需要timer
你所谓的主程序应该是就是应该就是过程或者函数,运行时间很长,意味着,你的函数体里有循环次数很多的循环,你只要在循环体里面加入,以下代码假设你的循环为for循环
for....
......
progressbar1.value=progressbar1.value+delta'进度增加值,假设使用进度条显示进度
doevents
next
就能得到……
显示进度 已经实现了
我想实现的是计时 计时不可以简单的 加到for循环里 因为首先每个for运行的时间不是1秒 其次每个for的运行时间不定 最后 计时和程序运行到哪里没有联系 是两个轨道 是程序一运行就开始计时
作者: totola147 发布时间: 2011-12-25
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28