+ -
当前位置:首页 → 问答吧 → 求助——vba如何实现并行程序设计

求助——vba如何实现并行程序设计

时间:2011-12-24

来源:互联网

问题基于这样的一个需求 我的一个数据处理的程序,处理数据需要相当长的时间,所以给程序添加了显示运行进度的窗体,进度用prograssbar实现了 现在我想在加个计时的功能 就是显示程序已经运行的时间 并结合运行进度和已运行时间 估算剩余时间 就像压缩的程序那样 

问题就在对程序进行运行计时,一开始是想通过一个计时函数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

就能得到需要的效果

作者: worldy   发布时间: 2011-12-25

引用 1 楼 worldy 的回复:
事实上并需要timer
你所谓的主程序应该是就是应该就是过程或者函数,运行时间很长,意味着,你的函数体里有循环次数很多的循环,你只要在循环体里面加入,以下代码假设你的循环为for循环

for....

......
progressbar1.value=progressbar1.value+delta'进度增加值,假设使用进度条显示进度
doevents
next

就能得到……


显示进度 已经实现了  
我想实现的是计时 计时不可以简单的 加到for循环里 因为首先每个for运行的时间不是1秒 其次每个for的运行时间不定 最后 计时和程序运行到哪里没有联系 是两个轨道 是程序一运行就开始计时

作者: totola147   发布时间: 2011-12-25

热门下载

更多