我做了一个实时告警采集的程序,用了5个winsock,在数据到达事件中语音提示内容.
程序运行过程中发现运行时间越长播放语音提示越慢,是什么原因呢?
另外,我在关闭程序的时候先关闭winsock连接,窗体unload了好像程序正常退出了.但是在windows进程管理里面发现程序还在!时间一长往往有好几个在里面?这是什么原因?怎样解决?
多谢!
程序运行过程中发现运行时间越长播放语音提示越慢,是什么原因呢?
另外,我在关闭程序的时候先关闭winsock连接,窗体unload了好像程序正常退出了.但是在windows进程管理里面发现程序还在!时间一长往往有好几个在里面?这是什么原因?怎样解决?
多谢!
请多多指教!
我考虑到可以用winsock的控件组,但是不很熟悉,因为我要长时间和远程机器连并从那里取告警,所以我就用了5个,一人一个,我是知道WINSOCK多了耗费资源,但是有什么好办法吗?
如果非正常退出连接会变成TIME_WAIT状态,不知道是不是这个原因造成的程序不能正常退出.
研究不透
我自己做的文件互传工具.
每秒接收45K/S还很正常啊!
能把你的WINSOCK数据接收事件中写的代码贴出来吗?如果优化了化码后区区5个WINSOCK是没什么关系的.
问题出在这里吗
代码多写两行没事不过怎么说呢你要有能把任何数组转成BYTE数组存放才行.嘿嘿我的程序以前就这样的.不论是应用程序的事件信息还是对方的字串聊天信息以及还有文件数据等
全部用一个WINSOCK发送而不会混淆.
Dim strdata As String
Dim tim, tim1, stt1 As String
Dim plays, row As Long
Dim aa, bb, cc, a, b, c, d, e, f, g, h, i, j, k, l, m, n, dd, o, len3, len4 As Integer
Dim len1, len2, KeyAscii As Integer
If fg.row <= 48 Then'FG为MSFLEXGRID控件,显示告警内容
Open "c:\Program Files\告警监控\log.txt" For Append As #3
Winsock1.GetData strdata
aa = InStr(strdata, "<")
bb = Len(strdata)
cc = InStr(strdata, "ALARM STATUS")
dd = InStr(strdata, "ALARM LIST")
a = InStr(strdata, "CP FAULT")
b = InStr(strdata, "CEASING")
c = InStr(strdata, "RP FAULT")
d = InStr(strdata, "SP NODE")
e = InStr(strdata, "CCITT7 SIGNALLING LINK FAILURE")
f = InStr(strdata, "DIGITAL PATH FAULT SUPERVISION")
g = InStr(strdata, "GROUP SWITCH FAULT")
h = InStr(strdata, "A1")
i = InStr(strdata, "A2")
j = InStr(strdata, "A3")
k = InStr(strdata, "MAGAZINE POWER FAULT")
l = InStr(strdata, "SYSTEM RESTART")
m = InStr(strdata, "COMMON CHARGING OUTPUT CONGESTION")
n = InStr(strdata, "SOFTWARE ERROR")
o = InStr(strdata, "RADIO TRANSMISSION GB INTERFACE FAULT")
' Open "c:\Program Files\告警监控\log.txt" For Append As #3
If Right(strdata, 3) = "DE:" Or Right(strdata, 3) = "RD:" Or Right(strdata, 1) = "<" Or InStr(strdata, "???") <> 0 Or InStr(strdata, "AUTHORIZATION FAILURE") <> 0 Then
If Right(strdata, 3) = "DE:" Then '输入PASSWORD
Winsock1.SendData 系统配置.Text2.Text & vbCrLf'输入用户名
Else
If Right(strdata, 3) = "RD:" Then
Winsock1.SendData 系统配置.Text84.Text & vbCrLf
Else
End If
If Right(strdata, 1) = "<" And ss = 1 And pp = 0 Then
RichTextBox1.Text = RichTextBox1.Text & "您已经连接到..." & 系统配置.Text27.Text & " , 实时告警采集已启动..." & vbCrLf
Winsock1.SendData StrConv(Chr(4), 8)
Else
End If
If InStr(strdata, "AUTHORIZATION FAILURE") <> 0 Then
MsgBox ("用户名或者密码不对,请重新设置!")
Else
End If
End If
Else
If InStr(strdata, "END") <> 0 And InStr(strdata, "LOGGED OFF") = 0 And cc = 0 And bb <> 77 And bb <> 616 And dd = 0 And InStr(strdata, "???") = 0 And InStr(strdata, "") = 0 And InStr(strdata, "AUTHORIZATION FAILURE") = 0 Then
Print #3, strdata
RichTextBox1.SelStart = Len(RichTextBox1.Text) + 29
RichTextBox1.Text = RichTextBox1.Text & strdata & vbCrLf
If InStr(strdata, "PAGE 1") <> 0 Then
len3 = Len(strdata)
len4 = InStr(strdata, "PAGE 1")
tim = left((Right(left(strdata, len4 - 1), 13)), 11)
Else
End If
fg.TextMatrix(fg.row, 3) = strdata
fg.TextMatrix(fg.row, 2) = tim
'********根据不同告警发送声音文件***************
If InStr(strdata, 系统配置.Text27.Text) <> 0 Then
fg.TextMatrix(fg.row, 0) = 系统配置.Text27.Text
Else
End If
If InStr(strdata, "SIZE CHANGE REQUIRED") <> 0 And bb = 0 Then
plays = sndPlaySound("c:\Program Files\告警监控\JUAsize.wav", SND_LOOP Or SND_ASYNC) '播放声音文件
fg.Col = 3
fg.RowSel = fg.row
fg.CellBackColor = RGB(255, 0, 0)
End If
太长删除一部分告警内容分析
fg.row = fg.row + 1
Else
End If
End If
Close #3
Else
fg.row = 1
Loop
fg.row = 0
fg.Clear
End If
Close #3 End Sub对不起,只好让你们晕了
为什么不做全局变量?!!
定义一个变量比访问一个变量来的慢多了!占用资源也多!后面的就不用看了效率极为低下!
为什么不转成BYTE数组发送呢?