我用Winsock控件在两台主机之间定时发送数据,用QueryPerformancounter函数作高精度定时器定时发送数据(10ms),同时记录数据来回的时间,但时间一长,定时发送数据的速度降了下来,请问这是什么原因呢?

解决方案 »

  1.   

    TCP协议,下面是发送代码
    Private Sub CmdSend_Click()
    Dim LagTick1 As LARGE_INTEGER
    Dim LagTick2 As LARGE_INTEGER
    Dim lTime As Long
    CmdSend.Enabled = False
    CmdStop.Enabled = True
    lTime = 10 * lMSFreq '10毫秒的震动次数
    Call QueryPerformanceCounter(LagTick1)
    LagTick2 = LagTick1
    While CmdStop.Enabled = True
          Call QueryPerformanceCounter(LagTick2)
       '如果震动次数大于10毫秒则数据加1,发送数据,计时,显示数据
       If LagTick2.lowpart - LagTick1.lowpart > lTime Then
          LagTick1 = LagTick2
       i = i + 1
       WinClient.SendData "0" & i
       Sendtime = GetTickCount()
       End If
       DoEvents
    Wend
    End Sub
      

  2.   

    我很早就已经说过了,使用QueryPerformancounter作高精度计时在某些时候是会有缺陷的,有些时候这种缺陷甚至是致命的(会罢工)。
    进行高精度计时推荐用:timeSetEvent
      

  3.   

    恐怕是楼上说的api的问题
    WinClient.SendData "0" & i
    后面注意+
    doevents