QReadWriteLock m_lock;

void MyWidget::Button1()
{
m_lock.lockForRead();
ShowMessage(tr("111"));
m_lock.lockForRead();
ShowMessage(tr("222"));
}
此时,111和222都可以顺利执行(第一个是锁住了进行读,第二个还是读数据,所以放行)

void MyWidget::Button1()
{
m_lock.lockForRead();
ShowMessage(tr("111"));
m_lock.lockForWrite();
ShowMessage(tr("222"));
}
此时,111可以执行,222不能执行(因为之前已经被锁住了,相当于正在读数据,所以想写入内容的话,不行)

void MyWidget::Button1()
{
m_lock.lockForWrite();
ShowMessage(tr("111"));
m_lock.lockForRead();
ShowMessage(tr("222"));
}
此时,111可以执行,222不能执行(第一个正在写,第二个想读,当然没法进入)

void MyWidget::Button1()
{
m_lock.lockForWrite();
ShowMessage(tr("111"));
m_lock.lockForWrite();
ShowMessage(tr("222"));
}
此时,111可以执行,222不能执行(第一个正在写,第二个也想写,当然没法进入)

----------------------------------------------------------------------------------------------------------

经过一夜的测试,

void MyWidget::Button1()
{
m_lock.lockForWrite();
ShowMessage(tr("111"));
m_lock.lockForRead();
ShowMessage(tr("222"));
}

的效果是,第二天还停在哪里,但程序没有崩溃。算是一个好消息(这个就是不能重复上锁的效果?)。

最新文章

  1. plsql配置
  2. tomcat8和7关于自定义tag的处理区别
  3. Android客户端稳定性测试——Monkey
  4. 骨骼动画的实现(OpenGL实现)
  5. 使用PhoneGap搭建一个山寨京东APP
  6. jsp自定义标签(时间格式化包括Long转时间)
  7. 介绍WEB站点结构
  8. Leetcode | Parentheses 相关
  9. oracle添加日志表
  10. discuz x2 diy 模块的样式点击不管用,模块的数据、标题都可以编辑
  11. python sys.argv[]
  12. Qt---- 点击按钮调用另一个窗口Ui
  13. 数据结构【一】:简单队列simple queue
  14. Step-by-Step XML Free Spring MVC 3 Configuration--reference
  15. 华为oj 计算字符个数
  16. Linux环境进程间通信(三):消息队列
  17. 使用BEM命名规范来组织CSS代码
  18. IIS7下设置https主机名灰色无法修改
  19. 第1章 HTTP协议基本介绍了解
  20. RabbitMQ学习之旅(一)

热门文章

  1. information_schema.collations 学习
  2. Nginx 的 Location 配置指令块
  3. TD数量不确定时如何让其宽度平均分布
  4. MotionEvent的getX(),getY()与getRawX(),getRawY()区别
  5. httrack,webdup,WinHTTrack,WebZip
  6. C语言中long类型,int类型
  7. nginx监听端口和反向代理端口的权限问题
  8. BFS visit tree
  9. Remove Duplicates from Sorted List II 解答
  10. 一起来学canvas (前言)