我要发帖 回复

新手上路

1

主题

17

积分

0

专家分

兴趣点(最多三项):

Unity引擎
军事仿真
VR互动软件

私信
发表时间 : 2019-6-27 11:22:27 | 浏览 : 136    评论 : 3
在使用GL Studio 3.2创建好仪表之后,在main函数修改代码,在本机用另一个程序使用UDP发送过来数据之后,有5秒左右的延迟,为什么会有这么大的延迟呢?
下面是main函数
int main(int argc,char *argv[])
{
  try
  {

    glsCommandLine::Instance()->ReadCommandLine(argc,argv);

    r44project = new R44projectClass("R44",1645,940);
    r44project->CreateObjects();

//////////////////// User Code from section: "Main Initialization" ////////////
///////////////////////////////////////////////////////////////////////////////
    r44project->SetRedraw();

    //OutputParameter m_OutputParameter;
        CNetCom *m_pNetSocket;
        unsigned FDM_RECV_UDP_PORT,FDM_SEND_UDP_PORT,TIME_STEP;

        FDM_RECV_UDP_PORT=6012;
        FDM_SEND_UDP_PORT=6010;
        TIME_STEP=10;

       
        bool optValue=true;
        if(!AfxSocketInit())
        {
                AfxMessageBox(_T("网络Socket初始化失败!"));
                //return FALSE;
        }

        m_pNetSocket = new CNetCom();


        m_pNetSocket->Create(FDM_SEND_UDP_PORT,SOCK_DGRAM);
        m_pNetSocket->SetSockOpt(SO_BROADCAST,&optValue,sizeof(bool));
        if(m_pNetSocket == NULL)
        {
                AfxMessageBox(_T("网络初始化失败"));
                //return 0;
        }
       
        double R44data[9];
        char RecvStr[NET_BUFFER_LENGTH];


        CString str_from_IP=m_pNetSocket->m_Guest_IP;//得到对方IP地址以及端口号
        int from_port=m_pNetSocket->m_Guest_Source_Port;//得到对方的端口号
    do
    {
//////////////////// User Code from section: "Main Loop" //////////////////////
///////////////////////////////////////////////////////////////////////////////



                m_pNetSocket->m_NumRecv = m_pNetSocket->ReceiveFrom(&m_pNetSocket->m_Receive_Buf,sizeof(m_pNetSocket->m_Receive_Buf),m_pNetSocket->m_Guest_IP,m_pNetSocket->m_Guest_Source_Port);
                if (m_pNetSocket->m_NumRecv==-1)
                        {
                                AfxMessageBox("no数据");
                                Sleep(20);
                        }
                else
                        {
                                UINT rva=m_pNetSocket->m_NumRecv;//得到数据包大小
                                memcpy(RecvStr,m_pNetSocket->m_Receive_Buf,NET_BUFFER_LENGTH);//数据复制过来

                                //memcpy(&m_OutputParameter,RecvStr,sizeof(m_OutputParameter));
                                           //赋值显示
                                /*R44data[0]=m_OutputParameter.VS;//升降速度 英尺/分
                                R44data[1]=m_OutputParameter.TTheta;//俯仰角
                                R44data[2]=m_OutputParameter.Gama;//坡度角
                                R44data[3]=m_OutputParameter.KIAS;//表速 海里/小时
                                R44data[4]=m_OutputParameter.EngineRpm;//发动机转速 %
                                R44data[5]=m_OutputParameter.RotateSpd;//旋翼转速 %
                                R44data[6]=m_OutputParameter.Altitude;//离标准海平面几何高度  英尺
                                R44data[7]=m_OutputParameter.Psai;//进气压力 英尺汞柱
                                R44data[8]=m_OutputParameter.ManifoldPressure;//航向角*/
                                R44data[0]=atoi(RecvStr);
                                //r44project->RecordCalculateStart();
                                r44project->UdpData(R44data);
                                //r44project->RecordCalculateEnd();               
                                Sleep(10);               
                        }
    }
    while(r44project->FrameAnimate());

    // Delete the instance
    delete r44project;

  }
  catch(DistiException e)
  {
    Error(e.what());
  }
  return 0;
}


最近VR访客

david_m 评论于2019-6-28 18:07:06
慢慢慢慢慢慢啊 发表于 2019-6-27 11:22 AM
在使用GL Studio 3.2创建好仪表之后,在main函数修改代码,在本机用另一个程序使用UDP发送过来数据之后,有 ...

把接收数据放在一个单独的线程里,然后与GL线程用共享内存或全局变量或其他形式,应该不会出延迟。
勤省,笃学,自强
慢慢慢慢慢慢啊 评论于2019-7-3 14:26:07
david_m 发表于 2019-6-28 06:07 PM
把接收数据放在一个单独的线程里,然后与GL线程用共享内存或全局变量或其他形式,应该不会出延迟。 ...

我后面在Initialize()函数中完成UDP套接字库初始化设置,然后定义套接字和用于接收数据的缓存区,绑定套接字。然后在Calculate ()中调用接收函数。但是本机发送的UDP数据还是有2s左右的延迟。
你说的把接收数据放在一个单独的线程里是什么意思呢?

手机版|VR开发网 ( 津ICP备18009691号 )|网站地图 统计 网安备12019202000257

GMT+8, 2019-8-24 11:46 PM

返回顶部