雨路IT
当前位置:首页 » it资讯

winsock的getdata的问题

八月 23rd, 2007 by admin



首先这是一个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事件,之后我再按下按扭,才得到数据-------怎么这么奇怪呀  
 

参考文章:

  • 电信法送审稿向律师界征意见
  • 我心目中的完美手机
  • 进入 Harmony 世界: 研究 Port Layer
  • 基于注释的单元测试框架
  • 驯服 Tiger: 集合框架
  • 一个女律师荒唐的一夜情(图)
  • Q520外观篇之非完美体会
  • Java 理论与实践: 做个好的…
  • Spring 系列: Spring 框架简…
  • 决策表:使用IBM Rational Functional Tester的一项测试技术
  • 网友回答:
    发表者:ipman

    数据发出后不是立即接收到的,  
      看看这样如何?  
      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

    发表者:rappercn

    senddata之前检查sck.state是否等于sckconnected,不是的话发送的消息可能就收不到。

    发表者:lax

    senddata()   要在   connect   事件发生后调用;  
      另外,在   ide   环境下运行的时候,如果有   msgbox   弹出,   dataarrival   事件是不会触发的,编译后才可以。

    .

    Posted in noname. Edit

    发表评论