QThead QUdpSocket多线程组播小例子
来源:互联网 发布:倩女幽魂手游mac版 编辑:程序博客网 时间:2024/05/22 06:57
QThread多线程的使用方法有多种。
这里是一个简单的在多线程中建立组播的例子。
组播发送程序:
QUdpSocket *socket=new QUdpSocket; while(1) { QThread::sleep(1); QString s=QTime::currentTime().toString(); int re=socket->writeDatagram(s.toUtf8(),QHostAddress("224.2.2.2"),62224);// int re=socket->writeDatagram(s.toUtf8(),QHostAddress::LocalHost,62224); if(re==-1) qDebug()<<"send failed--"; else qDebug()<<"send ok--"<<s; }
组播发送socket不需要加入组播,只要向组播地址发送数据即可。
组播接收:
void Thread::run(){ //打印当前线程指针地址 qDebug()<<"void Thread::run()--"<<currentThread(); //socket作为成员变量,实例化socket socket=new QUdpSocket; //socket再加入组播之前,需要先绑定网络地址和端口 if(!socket->bind(QHostAddress::AnyIPv4,62224,QAbstractSocket::ShareAddress)) qDebug()<<"bind failed--"; //socket调用joinMulticastGroup加入组播 if(!socket->joinMulticastGroup(QHostAddress("224.2.2.2"))) qDebug()<<"joinMuticastGroup failed--"; //连接socket的信号readRead到线程的槽函数slotRead上 //并且指定信号槽连接模式为Qt::DirectConnection connect(socket,SIGNAL(readyRead()),this,SLOT(slotRead()),Qt::DirectConnection); //启动线程的事件循环,只有这样,该线程中的slotRead槽函数才会被调用到 exec();}
这里重点讲一下socket信号槽函数的连接模式 Qt::DirectConnection ,当信号发送的时候,槽函数被立即执行,则不会进入到其他线程中执行。
另外一定需要注意的是,socket的实例化以及socket绑定地址端口加入组播地址等操作都要在run函数中执行,否则被认为在跨线程调用socket。
1 0
- QThead QUdpSocket多线程组播小例子
- QSplashScreen用QThead定时
- QUdpSocket Class
- 初识QUdpsocket
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- 多线程例子
- SQL 如何查询时竖着的数据横着显示
- 文件下载
- Mac下配置Maven
- Collider(碰撞器与触发器)
- java类的实现
- QThead QUdpSocket多线程组播小例子
- Android 系统当中各种尺寸单位的定义及使用
- leetcode_060 Permutation Sequence
- struts2通配符
- WIN10 IIS 配置https
- 欢迎使用CSDN-markdown编辑器
- 按钮(Button)组件的功能与用法
- memcached学习笔记(三)
- Linux 性能优化之 IO 子系统