• 224阅读
  • 7回复

[提问]QT网络通信   UDP广播+多线程问题 [复制链接]

上一主题 下一主题
在线suzhuorui
 

只看楼主 倒序阅读 楼主  发表于: 08-14
— 本帖被 圣域天子 从 Qt 作品展 移动到本区(2019-08-21) —
程序A中每次创建5个线程发送广播       但是程序B每次只能接收到2个。代码就是最简单的测试代码,求大佬告知问题所在


离线firebolt

只看该作者 1楼 发表于: 08-14
不明白广播为啥要用5个线程,如果是测试多线程需要给udpSocket加个锁。
离线yunchao630

只看该作者 2楼 发表于: 08-15
同上,发送广播的函数互斥一下
在线suzhuorui

只看该作者 3楼 发表于: 08-15
回 firebolt 的帖子
firebolt:不明白广播为啥要用5个线程,如果是测试多线程需要给udpSocket加个锁。 (2019-08-14 22:09) 

加锁的话,我是在run函数中加的,也没用呀
如果我想让 for循环中的5个线程 依次发送广播,就是等待第一个线程发送完毕再开始第二个线程,要怎么办呢?
在线suzhuorui

只看该作者 4楼 发表于: 08-15
回 suzhuorui 的帖子
suzhuorui:加锁的话,我是在run函数中加的,也没用呀
如果我想让 for循环中的5个线程 依次发送广播,就是等待第一个线程发送完毕再开始第二个线程,要怎么办呢? (2019-08-15 14:12) 

用计时器可以做到    但是用for循环怎么做呢?求大神指点
离线powerriver

只看该作者 5楼 发表于: 昨天 22:52
使用信号/槽,不要使用循环的方式,在初始化时
    udpsocket = new QUdpSocket(this);
    bool ret = udpsocket->bind(port, QUdpSocket::ShareAddress|QUdpSocket::ReuseAddressHint);
    if (!ret)
        exit(0);
    connect(udpsocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));

void Mainwindow::readPendingDatagrams()
{
    while(udpsocket->hasPendingDatagrams())
    {
     .....
在线suzhuorui

只看该作者 6楼 发表于: 6小时前
回 powerriver 的帖子
powerriver:使用信号/槽,不要使用循环的方式,在初始化时
    udpsocket = new QUdpSocket(this);
    bool ret = udpsocket->bind(port, QUdpSocket::ShareAddress|QUdpSocket::ReuseAddressHint);
    if (!ret)
 &n .. (2019-08-20 22:52) 

我循环只是为了多开线程,而且我也有用到信号槽
我就是想测试一下这个广播,想看看一下子发送的人数多了(就是循环五次开了五个线程) ,   能不能全部接到,但结果是不能的,我也不知道问题出在哪里,所以.......大佬
在线青空飞羽

只看该作者 7楼 发表于: 5小时前
UdpSend中的udpSocket应该放在run方法里去new吧,这样udpSocket才是属于线程,放到构造函数里new的话还是属于主线程
快速回复
限100 字节
 
上一个 下一个