在使用winsock数组发送消息时,必须使用一个Doevents才能把每一个winsock的信息发送出去,但是处理的时间就会很慢。如果去掉Doevents,就不能保证每一个winsock都能发送出去信息,有没有一种办法可以取代Doevents,又不交出控制权,而且不影响处理的时间?Dim a As Integer
For a = 0 To 100
Winsock1(a).SendData "info"
DoEvents
Next a
For a = 0 To 100
Winsock1(a).SendData "info"
DoEvents
Next a
Const TimeOut As Long = 1000 '设置一个超时界限
Public Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
'以上声明在通用段Dim a As Integer
tt as longFor a = 0 To 100
Done = False
Winsock1(a).SendData "info"
tt = GetTickCount() + TimeOut
Do Until Done
'设置超时防止死循环
If GetTickCount() > tt Then Exit Do
Loop
Next aPrivate Sub Winsock1_SendComplete()
Done = True
End Sub
Done = True
End Sub
Private m_CurBuffIndex As Integer '当前发送第几个数据Private Sub Command1_Click()
'假设所有要发送的数据都存在m_strBuff数组里面了
m_CurBuffIndex = 0 '先发送第一个
Winsock1.SendData m_strBuff(m_CurBuffIndex)
End SubPrivate Sub Winsock1_SendComplete()
'发送完毕 接着发
m_CurBuffIndex = m_CurBuffIndex + 1
If m_CurBuffIndex <= UBound(m_strBuff) Then
Winsock1.SendData m_strBuff(m_CurBuffIndex)
Else
'm_strBuff数组的数据全部发送完毕
'初始化m_CurBuffIndex m_strBuff
m_CurBuffIndex = 0
ReDim m_strBuff(0)
End If
End Sub
Private m_strBuff() As String '发送数据的缓冲区
Private m_CurBuffIndex As Integer '当前发送第几个数据Private Sub Command1_Click()
'假设所有要发送的数据都存在m_strBuff数组里面了
m_CurBuffIndex = 0 '先发送第一个
Winsock1.SendData m_strBuff(m_CurBuffIndex)
End SubPrivate Sub Winsock1_SendComplete()
'发送完毕 接着发
m_CurBuffIndex = m_CurBuffIndex + 1
If m_CurBuffIndex <= UBound(m_strBuff) And m_CurBuffIndex >=0 Then
Winsock1.SendData m_strBuff(m_CurBuffIndex)
Else
'm_strBuff数组的数据全部发送完毕
'初始化m_CurBuffIndex m_strBuff
m_CurBuffIndex = -1 '-1表示缓冲区里没有要发送的数据
ReDim m_strBuff(0)
End If
End Sub
Private Sub Winsock1_SendComplete(index as long)
winsock1(index+1).send "info"
end sub
是连接混乱还是数据交换混乱?
如果是数据交换混乱,是因为处理数据的时间过长,我是这么解决:
数据到达时,创建一个对象集合保存接收的数据,然后再处理集合的数据。