Class VB6:剩余时间类

Class VB6:剩余时间类,class,math,vb6,Class,Math,Vb6,我一直想要一个简单的系统,它可以告诉我在处理longfornext语句时大约还剩多少分钟 我试图通过创建一个类来实现这一点 在开始时,我想设置我有多少下一个(->setMax) 在每个For Next中,我都会告诉全班,For Next中的一个已经完成。(->addOneDone) 然后,课程会告诉我在完成整个for next语句之前,我还需要等待多少分钟 我很确定我做得很好,但还是有点不对劲。 我怀疑是毫秒到分钟的转换 有人能帮我找到我的错误吗 多谢各位 Option Explicit Pr

我一直想要一个简单的系统,它可以告诉我在处理longfornext语句时大约还剩多少分钟

我试图通过创建一个类来实现这一点

在开始时,我想设置我有多少下一个(->setMax) 在每个For Next中,我都会告诉全班,For Next中的一个已经完成。(->addOneDone) 然后,课程会告诉我在完成整个for next语句之前,我还需要等待多少分钟

我很确定我做得很好,但还是有点不对劲。 我怀疑是毫秒到分钟的转换

有人能帮我找到我的错误吗

多谢各位

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

只是出于兴趣,调用此例程不会扭曲剩余的时间吗?(显然只是可以忽略,但仍然…)是的,当然。但对我来说,这并不重要。