回复: QT网络通信 UDP广播+多线程问题
#6 回 powerriver 的帖子 [suzhuorui 08-21 09:47]
powerriver:使用信号/槽,不要使用循环的方式,在初始化时
udpsocket = new QUdpSocket(this);
bool ret = udpsocket->bind(port, QUdpSocket::ShareAddress|QUdpSocket::ReuseAddressHint);
if (!ret)
&n .. (2019-08-20 22:52)
我循环只是为了多开线程,而且我也有用到信号槽
我就是想测试一下这个广播,想看看一下子发送的人数多了(就是循环五次开了五个线程) , 能不能全部接到,但结果是不能的,我也不知道问题出在哪里,所以.......大佬
#7 [青空飞羽 08-21 11:18]
UdpSend中的udpSocket应该放在run方法里去new吧,这样udpSocket才是属于线程,放到构造函数里new的话还是属于主线程
#8 回 青空飞羽 的帖子 [suzhuorui 08-21 16:13]
青空飞羽:
UdpSend中的udpSocket应该放在run方法里去new吧,这样udpSocket才是属于线程,放到构造函数里new的话还是属于主线程
青空飞羽:
UdpSend中的udpSocket应该放在run方法里去new吧,这样udpSocket才是属于线程,放到构造函数里new的话还是属于主线程
放进去了,但还是不可以。
我在run函数中加入了一个全局变量,并且加锁看了一下,现在的问题是在第一次点击发送广播按钮后只能接收到0和4,而接下来的每一次都能接收到5次正确的值,这是为什么呢?
#9 [suzhuorui 08-22 09:56]
问题解决了,上完整的代码
发送端界面cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include "udpsend.h"
#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
int num=0;
QMutex mutex;
void MainWindow::on_pushButton_clicked()
{
UdpSend *thread[5];
for(int i=0;i
#10 回 suzhuorui 的帖子 [fsu0413 08-23 08:33]
suzhuorui:问题解决了,上完整的代码
发送端界面cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
....... (2019-08-22 09:56)
用if肯定是错的,应该用while,后面的处理应该放到while里