继上篇qt相关心得(1)-CSDN博客,这里把剩下的总结一下
八. qt里面的相关锁
网络服务这种少不得是并发的,多线程的,有些数据需要保证隔离性,这个就需要加锁.
(1) QMutex
可以用这个互斥变量,有点像Java里面的synchronized,修饰代码块.
先定义 QMutex m_mutex;
在需要加锁的前后加上 m_mutex.lock();m_mutex.unlock();
(2)QReadWriteLock 读写锁
这个就是读写锁,原理就不说了,这里使用有两种方法,
a.定义QReadWriteLock m_rwLock;
需要加读锁的地方加上m_rwLock.lockForRead(); m_rwLock.unlock();
需要在加写锁的地方加上m_rwLock.lockForWrite(); m_rwLock.unlock();
b.这个是我使用的 先定义mutable QReadWriteLock rwlock;
需要加读锁的地方 QReadLocker locker(&rwlock);
需要加写锁的地方 QWriteLocker locker(&rwlock);
QWriteLocker(和QReadLocker)的目的是简化QReadWriteLock的锁定和解锁。锁定和解锁语句或异常处理代码容易出错,难以调试。在这种情况下,可以使用QWriteLocker来确保锁的状态总是定义良好的。 下面的写法 等价于上面的写法,就是保证锁的状态良好.
九,单例模式
这个其实跟java的单例模式差不多,这里需要强调的是如果是获取单例模式的指针,这个是不需要释放的.
(1)先定义
public: static ServiceConfig* getInstance();
private : ServiceConfig();
static ServiceConfig*instance;
(2)cpp实现方法
十.配置文件读取
很多时候,需要在外面配置服务名,服务端口,ip和日志等等,需要解析外面的文件.
(1) 先定义配置文件路径
(2) 指定文件的格式
(3)我用的ini,可以按一个个键值读取,当读取的配置项不存在时,读取后面的默认值
这里先总结到这里,后续重要的,我再更新更新