winsock的getdata的问题
首先这是一个activx的控件,高手看一下代码:
//************定义返回值************//
private value as string
public is_new as integer
//**********客户端掉用的方法set_id*******//
public function set_id(byval itemid as string)
tcps.senddata ("read," + itemid)
end function
//**********客户端掉用的方法read()得到浮点数*******//
public function read() as double
read = val(value)
end function
//**********winsock的事件**************//
public function write_(byval itemid as string, byval value) as string
tcps.senddata ("write," + itemid + "," & value)
write_ = value
end function
private sub tcps_dataarrival(byval bytestotal as long)
is_new = 1
tcps.getdata value, vbstring
end sub
客户端如此调用:test是控件的实例
private sub command2_click()
call test.set_id("tic1102.mv")
text1.text = test.read
end sub
结果是,每次按下button,先是0,在按一下才是应当得到的值
跟踪一下发现,winsock控件的tcps_dataarrival只有在没有其他对象争用cpu的时候才触发,也就是说,当我第一次按下按扭时,发送数据,而winsock的getdata根本就没有读到数据,之后我的程序放弃cpu给winsock,之后触发tcps_dataarrival事件,之后我再按下按扭,才得到数据-------怎么这么奇怪呀
参考文章:
数据发出后不是立即接收到的,
看看这样如何?
private sub command2_click()
call test.set_id("tic1102.mv")
t=timer
while timer-t<0.1
doevents
wend
text1.text = test.read
end sub
senddata之前检查sck.state是否等于sckconnected,不是的话发送的消息可能就收不到。
senddata() 要在 connect 事件发生后调用;
另外,在 ide 环境下运行的时候,如果有 msgbox 弹出, dataarrival 事件是不会触发的,编译后才可以。
Posted in noname. Edit