——vba怎么实现并行程序设计

fieldset{padding:10px;}

求助——vba如何实现并行程序设计问题基于这样的一个需求 我的一个数据处理的程序,处理数据需要相当长的时间,所以给程序添加了显示运行进度的窗体,进度用prograssbar实现了 现在我想在加个计时的功能 就是显示程序已经运行的时间 并结合运行进度和已运行时间 估算剩余时间 就像压缩的程序那样 问题就在对程序进行运行计时,一开始是想通过一个计时函数timecounter()实现,其中用DOENVENT 使得当窗体加载后 窗体上显示的时间正常 (这是主程序没有运行的时候) 因为窗体显示 不占用系统 所以doenvet 到了程序中设计的1秒时间后 自动返回 然后在下一个循环 总而言之 计时正常 但是一旦主程序运行了 因为程序运行要很久 一旦计时程序转让了控制权 主程序不会主动让出控制权在运行结束之前 所以计时就失败了函数如下VB code

Sub time_Counter()' 使用前要初始化 Costtime 和 打开计时器开关 TurnOff_clock' 使用完 要关闭计时器开关'Costtime  计数器'TurnOff_clock  计时开关Dim tempN As IntegerDim 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        WendEnd Sub

如何实现对程序运行计时呢??? 是vba 没有timer控件 只有timer函数算是并行的程序设计虽然相互之间不用交互只有触发和终止的关系,VB中如何并行程序设计呢——解决方案——————————————————–事实上并需要timer你所谓的主程序应该是就是应该就是过程或者函数,运行时间很长,意味着,你的函数体里有循环次数很多的循环,你只要在循环体里面加入,以下代码假设你的循环为for循环for……….progressbar1.value=progressbar1.value+delta’进度增加值,假设使用进度条显示进度doeventsnext就能得到需要的效果——解决方案——————————————————–这和单步的运行时间有什么关系?计时部分先记下开始时间;然后每次更新进度时再取一下当前时间,就可以计算经过时间了、结合进度比率可以计算剩余时间。这不就全了!——解决方案——————————————————–用timer控件就可以实现了假设你的循环for Text1.text = now..next每次循环时间都不固定timer控件里头可以可以根据Text1.text的变化, 来递增时间, 下面是个例子text1,command1,text2,timer1text1是你的循环里头的那个时间command1是你的循环不固定时间控制text2是你需要不断显示的准确时间Private Sub Command1_Click() Text1.Text = TimeEnd SubPrivate Sub Text1_Change() Text2.Text = Text1.Text Timer1.Interval = 1000End SubPrivate Sub Timer1_Timer() Text2.Text = TimeValue(Text2.Text) + TimeValue("00:00:01")End Sub——解决方案——————————————————–楼主:想要的是标准的多线程了。。。任何其他的类似 Timer 的东西,都无法实现你想要的,它们只能近似模拟出效果而已,无论再怎么做,它们都不是实际意义上的多线程!看了你的要求和回贴,感觉你要的就是纯粹的多线程!VB6 做多线程也还可以,VBA 不知道能不能做了。。。应该是可以吧!总之,两种途径:1、直接调用多线程 WIN32DLL;2、使用 VB 自身的 ACTIVEX DLL 工程;——解决方案——————————————————–把刷新进度的步骤分得更细点,只要每个间隔在0.5秒以下,进度就很平滑了。这是最简单的方案。——解决方案——————————————————–我的方案就是最简单最好的, 都看不到么, 只要你的tiemr开始运行, 就会永远的1秒一次的准确的跳动下去——解决方案——————————————————–VB code

While httpRequester.ReadyState <> 4  在这里刷新时间  DoEventsWend打掉的应是脆弱的铁屑,锻成的将是锋利的钢刀。

——vba怎么实现并行程序设计

相关文章:

你感兴趣的文章:

标签云: