Class VB6:剩余时间类
我一直想要一个简单的系统,它可以告诉我在处理longfornext语句时大约还剩多少分钟 我试图通过创建一个类来实现这一点 在开始时,我想设置我有多少下一个(->setMax) 在每个For Next中,我都会告诉全班,For Next中的一个已经完成。(->addOneDone) 然后,课程会告诉我在完成整个for next语句之前,我还需要等待多少分钟 我很确定我做得很好,但还是有点不对劲。 我怀疑是毫秒到分钟的转换 有人能帮我找到我的错误吗 多谢各位Class VB6:剩余时间类,class,math,vb6,Class,Math,Vb6,我一直想要一个简单的系统,它可以告诉我在处理longfornext语句时大约还剩多少分钟 我试图通过创建一个类来实现这一点 在开始时,我想设置我有多少下一个(->setMax) 在每个For Next中,我都会告诉全班,For Next中的一个已经完成。(->addOneDone) 然后,课程会告诉我在完成整个for next语句之前,我还需要等待多少分钟 我很确定我做得很好,但还是有点不对劲。 我怀疑是毫秒到分钟的转换 有人能帮我找到我的错误吗 多谢各位 Option Explicit Pr
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private m_lMax&
Private m_lItemsDone&
Private m_lStart&
Private m_cMillisecondsAlreadyNeeded As Currency
Private m_lMinutesLeft&
Private m_lLastTick&
Public Sub setMax(ByVal uCount As Long)
m_lMax = uCount
m_lStart = GetTickCount()
End Sub
Public Sub addOneDone()
m_lItemsDone = (m_lItemsDone + 1)
Dim lTick&
lTick = GetTickCount
Dim lMillisecondsNeeded&
lMillisecondsNeeded = (lTick - m_lLastTick)
If (m_lLastTick > 0) Then
m_cMillisecondsAlreadyNeeded = (m_cMillisecondsAlreadyNeeded + lMillisecondsNeeded)
Dim lMillisecondsForOneItem&
lMillisecondsForOneItem = (m_cMillisecondsAlreadyNeeded / m_lItemsDone)
Dim lItemsLeft&
lItemsLeft = (m_lMax - m_lItemsDone)
Dim cMillisecondsLeftToBeDone As Currency
cMillisecondsLeftToBeDone = (lMillisecondsForOneItem * lItemsLeft)
Dim lMinutes&
lMinutes = MillisecondsToMinutes(cMillisecondsLeftToBeDone)
m_lMinutesLeft = lMinutes
End If
m_lLastTick = lTick
End Sub
Private Function MillisecondsToMinutes(ByVal uMilliseconds As Long) As Integer
Dim seconds As Double
seconds = uMilliseconds / 1000
Dim minutes As Double
minutes = seconds / 60
MillisecondsToMinutes = minutes
End Function
Public Property Get MinutesLeft() As Long
MinutesLeft = m_lMinutesLeft
End Property
我更改了代码,现在可以使用了:
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private m_lMax&
Private m_lItemsDone&
Private m_lStart&
Private m_cMillisecondsAlreadyNeeded As Currency
Private m_lMinutesLeft&
Public Sub setMax(ByVal uCount As Long)
m_lMax = uCount
m_lStart = GetTickCount()
End Sub
Public Sub addOneDone()
m_lItemsDone = (m_lItemsDone + 1)
Dim lTick&
lTick = GetTickCount
Dim lMillisecondsNeeded&
lMillisecondsNeeded = (lTick - m_lStart)
Dim dblMillisecondsForOneItem As Double
dblMillisecondsForOneItem = (lMillisecondsNeeded / m_lItemsDone)
Dim lItemsLeft&
lItemsLeft = (m_lMax - m_lItemsDone)
Dim cMillisecondsLeftToBeDone As Currency
cMillisecondsLeftToBeDone = (dblMillisecondsForOneItem * lItemsLeft)
Dim lMinutes&
lMinutes = MillisecondsToMinutes(cMillisecondsLeftToBeDone)
m_lMinutesLeft = lMinutes
End Sub
Private Function MillisecondsToMinutes(ByVal uMilliseconds As Long) As Integer
MillisecondsToMinutes = uMilliseconds / 1000 / 60
End Function
Public Property Get MinutesLeft() As Long
MinutesLeft = m_lMinutesLeft
End Property
只是出于兴趣,调用此例程不会扭曲剩余的时间吗?(显然只是可以忽略,但仍然…)是的,当然。但对我来说,这并不重要。