关于数据是DSP通过网线进行传输,用OpenGL实时显示数据点

shn521 2011-06-14 10:30:08
for(int i=0; i<ANGLE_QUANT; i++)
{

recv(s,recvbuff,sizeof(recvbuff),0);
for(j=0;j<DIRECT_QUANT/2;j++)
{
memcpy(&ptnet[i][j].clr,recvbuff+32,4*sizeof(char));
glBegin(GL_POINTS);
glColor3f(0.0f,ptnet[i][j].clr/100.0f*100.0f,0.0f);//
glVertex2f(ptnet[i][j].x/1024.0f,ptnet[i][j].y/1024.0f);
glEnd();
}
}
::SwapBuffers(m_pDC->GetSafeHdc());

数据是DSP通过网线进行传输,用OpenGL实时显示数据点,运行到这里,软件会“无响应”,应该是反应不过来吧,请问大家应该怎么解决,感谢啊
我觉得这里有很多地方应该设置,但该怎么处理和设置希望大家指点下
...全文
126 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shn521 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xgpaul 的回复:]
引用 2 楼 shn521 的回复:
第二次循环到if(recv(s,recvbuff,sizeof(recvbuff),0)==SOCKET_ERROR)就往下执行不下去了,为什么啊

应该是阻塞了,数据还没到来。。。使用非阻塞来接收数据,异步选择模型(WSAAsyncSelect)
[/Quote]
感谢,我再试试
xgPaul 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shn521 的回复:]
第二次循环到if(recv(s,recvbuff,sizeof(recvbuff),0)==SOCKET_ERROR)就往下执行不下去了,为什么啊
[/Quote]
应该是阻塞了,数据还没到来。。。使用非阻塞来接收数据,异步选择模型(WSAAsyncSelect)
天鹅梦 2011-06-16
  • 打赏
  • 举报
回复
是阻塞了,象7楼所说的要使用非阻塞模型,另外你的接收函数也要重载或修改
recv(s,recvbuff,sizeof(recvbuff)这个是不能保证你那边send 400个字节,这边调用一次recv就能全接收过来,所以你要设个循环反复接收,直到接收完400为止,所以,就可取的就是在包的头先放上所要传输的字节数
向立天 2011-06-16
  • 打赏
  • 举报
回复
我觉得是不是应该这样
用一个线程只管接数据
然后对现实数据进行更新
主线程里就只管显示就好了
morebread 2011-06-15
  • 打赏
  • 举报
回复
你先用一个tcp调试工具连上你的dsp看看能不能顺利接收数据呢
shn521 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]
引用 2 楼 shn521 的回复:
第二次循环到if(recv(s,recvbuff,sizeof(recvbuff),0)==SOCKET_ERROR)就往下执行不下去了,为什么啊

阻塞了吧,还没有接收到任何数据?
[/Quote]
设置断点调试了,到第二次循环就不能再进行下步运行了,也不知道第二帧有没有收到数据,请问大哥该怎么处理啊
Eleven 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shn521 的回复:]
第二次循环到if(recv(s,recvbuff,sizeof(recvbuff),0)==SOCKET_ERROR)就往下执行不下去了,为什么啊
[/Quote]
阻塞了吧,还没有接收到任何数据?
shn521 2011-06-15
  • 打赏
  • 举报
回复
第二次循环到if(recv(s,recvbuff,sizeof(recvbuff),0)==SOCKET_ERROR)就往下执行不下去了,为什么啊
shn521 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 morebread 的回复:]
你先用一个tcp调试工具连上你的dsp看看能不能顺利接收数据呢
[/Quote]
数据是可以接收的
shn521 2011-06-14
  • 打赏
  • 举报
回复
修改下
glLoadIdentity();// 重置模型观察矩阵
glTranslatef(0.0f,0.0f,-2.5f);
int i;
ang=0;
while(ang<1024)
{
if(recv(s,recvbuff,sizeof(recvbuff),0)==SOCKET_ERROR)
{
itoa(WSAGetLastError(),str,10);
MessageBox(str);
exit(1);
}
for(i=ang;i<ang+1;i++)
{
glBegin(GL_POINTS);
for(int j=0;j<1024;j++)
{
char clr[32];
memcpy(clr,recvbuff+32*j,4*sizeof(char));
glColor3f(0.0f,clr[32]/100.0f*100.0f,0.0f);//
glVertex2f(pDoc->pt[i][j].x/1024.0f,pDoc->pt[i][j].y/1024.0f);

}
glEnd();

}
ang+=1;
::SwapBuffers(m_pDC->GetSafeHdc());
}
数据是DSP通过网线进行传输,用OpenGL实时显示数据点,运行到这里,软件会“无响应”,应该是反应不过来吧,请问大家应该怎么解决,感谢啊 我觉得这里有很多地方应该设置,但该怎么处理和设置希望大家指点。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧