大家好,我最近使用Vb,遇到问题如下:环境:Winxp professional中文版,VB6中文版问题描述如下:我做了个程序,不断循环的建立socket连接到某服务器端口,得到数据,关闭链接,进入下次循环。
我在循环过程中设置了timer,enabled=true,Interval=1000(为了方便测试,所以设置很小),timer事件中判断这个socket连接过程是不是“卡死”(设置了一个全局变量,检查这个变量),如果“卡死”就重新调用这个循环。我发现只有第一次“卡死”的时候,这个timer事件能够触发,然后使循环继续下去,以后再怎么卡都不能触发timer事件了。卡死就是一次循环的运行时间超过Interval设置的事件的意思。循环代码基本如下:Function Command1_click'防止突发
Winsock1.CloseFor i =....Timer2.Interval = 1000
Timer2.Enabled = Truesssss = chkServer(sArr(i))‘此函数用来建立socket链接,去取数据While Winsock1.State <> 8 And Winsock1.State <> 9 And Winsock1.State <> 0
DoEvents
Wend其他处理NEXTEnd FunctionPrivate Sub Timer2_Timer()
MsgBox ("进入 timer2")
If 卡死 Then
Timer2.Enabled = False
Command1_Click ’重新调用click事件开始新的循环
End If
Timer2.Enabled = False
End Sub现在怎么搞都只显示一次"进入 timer2"
希望大家能指教一下。万分谢谢
我在循环过程中设置了timer,enabled=true,Interval=1000(为了方便测试,所以设置很小),timer事件中判断这个socket连接过程是不是“卡死”(设置了一个全局变量,检查这个变量),如果“卡死”就重新调用这个循环。我发现只有第一次“卡死”的时候,这个timer事件能够触发,然后使循环继续下去,以后再怎么卡都不能触发timer事件了。卡死就是一次循环的运行时间超过Interval设置的事件的意思。循环代码基本如下:Function Command1_click'防止突发
Winsock1.CloseFor i =....Timer2.Interval = 1000
Timer2.Enabled = Truesssss = chkServer(sArr(i))‘此函数用来建立socket链接,去取数据While Winsock1.State <> 8 And Winsock1.State <> 9 And Winsock1.State <> 0
DoEvents
Wend其他处理NEXTEnd FunctionPrivate Sub Timer2_Timer()
MsgBox ("进入 timer2")
If 卡死 Then
Timer2.Enabled = False
Command1_Click ’重新调用click事件开始新的循环
End If
Timer2.Enabled = False
End Sub现在怎么搞都只显示一次"进入 timer2"
希望大家能指教一下。万分谢谢
Timer2.Enabled = False
Command1_Click ’重新调用click事件开始新的循环 '这个怎么也要在停止TIMER2之前吧
End If
Timer2.Enabled = False ?? 你执行一次后就永远UP掉了
Private Sub Timer2_Timer()
MsgBox ("进入 timer2")
If 卡死 Then
Timer2.Enabled = False
[color=#00FF00]"卡死"="不卡"
Command1_Click ’重新调用click事件开始新的循环
End If
Timer2.Enabled = False
End Sub
[/color]
还有就是1.
If 卡死 Then
Timer2.Enabled = False
Command1_Click ’重新调用click事件开始新的循环 '这个怎么也要在停止TIMER2之前吧
End If
command1_click 写到enabled前面也照旧的。2.
Timer2.Enabled = False ?? 你执行一次后就永远UP掉了
没有这句话也照旧
Private Sub Timer2_Timer()
MsgBox ("进入 timer2")
If 卡死 Then
Timer2.Enabled = False
"卡死"="不卡"
Command1_Click ’重新调用click事件开始新的循环
End If
Timer2.Enabled = False End Sub
我的意思是说不管卡不卡死,那个MsgBox ("进入 timer2") ,都要运行多次吧。我这里就1次。就再也不进这个事件了我想没interval都进这个事件检测的。
MsgBox ("进入 timer2")
If 卡死 Then
Timer2.Enabled = False
Command1_Click ’重新调用click事件开始新的循环
End If
Timer2.Enabled = False
End Sub
Command1_Click 的调用位置有问题,
一直在Timer2_Timer中还没出去
flag = False
'防止突发
Winsock1.Close
For i =....
Timer2.Interval = 1000
Timer2.Enabled = True
sssss = chkServer(sArr(i))‘此函数用来建立socket链接,去取数据
While Winsock1.State <> 8 And Winsock1.State <> 9 And Winsock1.State <> 0
DoEvents
If flag Then
Exit Sub
End If
Wend
其他处理
Next
End Sub
Function Command1_click()
Do
Call SSS
Loop While flag
End FunctionPrivate Sub Timer2_Timer()
MsgBox ("进入 timer2")
If 卡死 Then
Timer2.Enabled = False
flag = True
End If
Timer2.Enabled = False
End Sub
Function Command1_click
StartLine:
卡死=不卡
'防止突发
Winsock1.Close For i =....
If 卡死 Goto StartLine:
Timer2.Interval = 1000
Timer2.Enabled = True sssss = chkServer(sArr(i))‘此函数用来建立socket链接,去取数据 While Winsock1.State <> 8 And Winsock1.State <> 9 And Winsock1.State <> 0
DoEvents
Wend 其他处理 NEXT End FunctionPrivate Sub Timer2_Timer()
MsgBox ("进入 timer2")
卡死=卡死
Timer2.Enabled = False
End Sub
应该是
private Sub Command1_click()在for循环没结束的时候,重新从Doevents这里进入Command1_click
后果应该不可预料
改了一下,应该可以了
StartLine:
卡死=不卡
'防止突发
Winsock1.Close For i =....
If 卡死 Goto StartLine:
Timer2.Interval = 1000
Timer2.Enabled = True sssss = chkServer(sArr(i))‘此函数用来建立socket链接,去取数据 While Winsock1.State <> 8 And Winsock1.State <> 9 And Winsock1.State <> 0
DoEvents
Wend 其他处理 NEXT End FunctionPrivate Sub Timer2_Timer()
MsgBox ("进入 timer2")
卡死=卡死
Timer2.Enabled = False
End Sub
Function Command1_click '防止突发
Winsock1.Close For i =....
flag=0
Timer2.Interval = 1000
Timer2.Enabled = True sssss = chkServer(sArr(i))‘此函数用来建立socket链接,去取数据 While Winsock1.State <> 8 And Winsock1.State <> 9 And Winsock1.State <> 0
DoEvents
Wend 其他处理 NEXT End Function Private Sub Timer2_Timer()
MsgBox ("进入 timer2")
If 卡死 Then
Timer2.Enabled = False
flag=1 End If
Timer2.Enabled = False
End Sub Private Sub Timer3_Timer()
MsgBox ("进入 timer3")
If flag=1 Then
Command1_Click ’重新调用click事件开始新的循环
End If
End Sub
要有人点command?
Command当然要有人点
这个click事件没触发?
什么意思?
循环一旦中止一次就不能继续了吧?
哪个循环?试验过我的代码了吗?