我现在用socket客户端接收来自下位机的数据,每80ms收一个包10000字节的包(注意,一个包的数据可能分几次发送过来),接收完成后,还要画图。我现在只能这样:开一个线程,查询到有数据进来就画图。这样不好的地方是:我需要不停的查询,这样速度将会比较慢,还可能丢帧。能否使用事件触发方式:端口接收到数据则产生中断或消息,delphi的TCPClient好像不行。请高手指教。

解决方案 »

  1.   

    你说的我不大明白。
    通常我遇到这个问题,首先我会用udp控件而非tcp控件。其次 udp控件收到消息后,将数据放到一个数据队列里。
    一个专门的绘图线程不停检测队列里数据,只要有数据就进行绘图。
      

  2.   

    可以用列表做队列。
    但是要注意下并发的问题
    不要同时修改这个队列。
    udp控件添加  绘图线程读取并删除  
    同时会出错,锁一下。
      

  3.   

    我建议用Delphi自带的ServerSocket和ClientSocket。
      

  4.   

    用TServerSocket时,你查查帮助文档,从Delphi7之后,该控件就不在可视控件中,但在ScktComp.pas单元中还有定义。