一、线程同步
1、互斥量(互斥锁)
QMutex 就是POSIX中的pthread_mutex_t的封装
常用的两个成员函数 lock,unlock
2、读写锁
QReadWriteLock 它比QMutex更实用
常用的三个成员函数: lockForRead lockForWrite unlock
A读 B读 OK
A写 B读 NO
A写 B写 NO
3、信号量
QSemaphore 用于管理多个资源
QSemaphore 构造时设置资源数量
acquire(n) 获取资源 减去资源数 如果不够减则等待
release(n) 归还资源 加上资源数
二、网络通信
使用网络模块前要先在.pro文件中添加network
QT += core gui network
QUdpSocket类是Qt对UDP协议加socket的封装
1、创建QUdpSocket类对象
2、绑定ip地址和端口号
3、连接readyRead() 信号,当此信号来发射后,就表示可以接受数据了
4、在槽函数中调用readDatagram函数接收数据
qint64 QUdpSocket::readDatagram ( char * data, qint64 maxSize, QHostAddress * address = 0, quint16 * port = 0 )
host:发者的地址
port:返回时的端口号
5、返回数据
qint64 QUdpSocket::writeDatagram ( const char * data, qint64 size, const QHostAddress & address, quint16 port )
host和port是readDatagram函数接收到的
注意:每个QUdpSocket对象都需要绑定一个地址和端口号
Qt中封装了TCP协议 QTcpServer类负责服务端:
1、创建QTcpServer对象
2、监听listen需要的参数是地址和端口号
3、当有新的客户端连接成功时会发射newConnection信号
4、在newConnection信号的槽函数中,调用nextPendingConnection函数获取新的连接QTcpSocket对象
5、连接QTcpSocket对象的readyRead信号
6、在readyRead信号的槽函数使用read接收数据
7、调用write成员函数发送数据
QTcpSocket负责客户端
1、创建qTcpSocket对象
2、当对象与Server连接成功时会发射connected信号
3、调用成员函数connectToHost连接服务器,需要的参数是地址和端口号
4、connected信号的槽函数中开启发送数据
5、使用write发送数据,read接收数据