我一直想要一个简单的系统,它可以显示在处理较长的 for-next-statement 时大约还剩多少分钟。
我尝试通过创建一个类来实现这一点。
一开始,我想设置我有多少个 for-nexts (-> setMax) 在每个 For-Next 中,我会告诉班级其中一个 for-nexts 已经完成。(->addOneDone) 然后班级会告诉我我还需要等待多少分钟才能完成整个 for-next-statement。
我很确定我做得很好,但还是有问题。我怀疑这是毫秒到分钟的转换。
有人会帮我找出我的错误吗?
非常感谢你!
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