现在单位有一项目,需要通过网络从上位机获得数据,协议为udp,然后在下位机通过格式转换把数据通过接口板转发出去,要求数据更新时间为20ms,原来的程序使用的是非阻塞模式+多媒体定时器,在多媒体定时器20ms相应时间中调用recvfrom函数,把数据放入缓冲区中。问题如下:1。这种做法是否可行2.能否通过多线程+阻塞模式来实现,还望高手gg多多指点。

解决方案 »

  1.   

    2.能否通过多线程+阻塞模式来实现 更好 可以高效 占用cpu少
      

  2.   

    在一个线程中
    UINT MyThread(LPVOID lpvoid)
    {
       while(1)
      {
        ...
        recvfrom();   
        ...
       }
       return 0;
    }如果是非阻塞方式,至少有两个问题。1:cpu占用高2:recvfrom() 经常读不到数据(因为数据没来,取数据时机不当);如果加sleep()延时又容易丢包。
    如果是阻塞方式就不存在上述问题。
      

  3.   

    是阻塞方式CPU占用高,还是非阻塞方式CPU占用高呢?