没有合适的资源?快使用搜索试试~ 我知道了~
C++非阻塞式读取UDP,串口方式总结.txt
需积分: 47 8 下载量 179 浏览量
2019-12-03
17:46:41
上传
评论
收藏 4KB TXT 举报
温馨提示
试读
4页
使用C++撰写,非阻塞是的读取UDP,串口方式。串口数据,UDP数据一般采用阻塞式的方式,很多时候,整个程序如果没有接收到新的数据,那么程序就会一直等待接收数据,造成程序等待接收数据的状态,blockingread,无法正常向下运行,直到接收到新的数据,这种阻塞式方式缺点是会造成资源浪费,为了避免阻塞式程序导致程序被堵住,不往下执行,一种方式:采用多线程的方式,另外一种方式采用非阻塞的方式。 对于程序功能单一的传感器接收解析程序,可以采用阻塞式的方式,但是对于实时性要求高的复杂功能程序,不能因为传感器没有新数据,而停止不前,于是可以考虑最多等待多长时间,如果没有数据后,程序也正常向下执行:
资源推荐
资源详情
资源评论
串口数据,UDP数据一般采用阻塞式的方式,很多时候,整个程序如果没有接收到新的数据,那么程序就会一直等待接收数据,造成程序等待接收数据的状态,blockingread,无法正常向下运行,直到接收到新的数据,这种阻塞式方式缺点是会造成资源浪费,为了避免阻塞式程序导致程序被堵住,不往下执行,一种方式:采用多线程的方式,另外一种方式采用非阻塞的方式。
对于程序功能单一的传感器接收解析程序,可以采用阻塞式的方式,但是对于实时性要求高的复杂功能程序,不能因为传感器没有新数据,而停止不前,于是可以考虑最多等待多长时间,如果没有数据后,程序也正常向下执行:
采用非阻塞的方式读取数据方式如下:
采用非阻塞的方式读取UDP和串口等数据
例子1: 毫米波雷达接收程序
UDP消息的非阻塞式读取方式
int RadarObjectSensor::getPkg()
{
int _recv_len = 0;
struct sockaddr_in remoteAddr;
unsigned char msg[MSG_LEN]= {0};
int len = sizeof(remoteAddr);
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 50000;//100ms
fd_set readfd;
FD_ZERO(&readfd);
FD_SET(m_socket_fd, &readfd);
int ret = select(m_socket_fd + 1, &readfd, NULL, NULL, &timeout);
switch(ret)
{
//select error
case -1:
对于程序功能单一的传感器接收解析程序,可以采用阻塞式的方式,但是对于实时性要求高的复杂功能程序,不能因为传感器没有新数据,而停止不前,于是可以考虑最多等待多长时间,如果没有数据后,程序也正常向下执行:
采用非阻塞的方式读取数据方式如下:
采用非阻塞的方式读取UDP和串口等数据
例子1: 毫米波雷达接收程序
UDP消息的非阻塞式读取方式
int RadarObjectSensor::getPkg()
{
int _recv_len = 0;
struct sockaddr_in remoteAddr;
unsigned char msg[MSG_LEN]= {0};
int len = sizeof(remoteAddr);
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 50000;//100ms
fd_set readfd;
FD_ZERO(&readfd);
FD_SET(m_socket_fd, &readfd);
int ret = select(m_socket_fd + 1, &readfd, NULL, NULL, &timeout);
switch(ret)
{
//select error
case -1:
资源评论
lixiaohui139
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功