0

我一直想要一个简单的系统,它可以显示在处理较长的 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
4

1 回答 1

1

我改变了我的代码,它现在可以工作了:

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
于 2013-09-13T14:58:43.910 回答