当前位置: 首页 > news >正文

吴中区网站设计公司刀客源码网

吴中区网站设计公司,刀客源码网,专门做旅游的网站,wordpress下载证书后Qt互斥锁【QMutex】的使用、QMutexLocker的使用 Chapter1 Qt互斥锁(QMutex)的使用、QMutexLocker的使用一、QMutexLocker和QMutex实现示例图二、QMutex和QMutexLocker的关系#xff08;个人理解#xff09;三、QMutex使用和QMutexLocker使用1.QMutex的使用2.QMutexLocker的使… Qt互斥锁【QMutex】的使用、QMutexLocker的使用 Chapter1 Qt互斥锁(QMutex)的使用、QMutexLocker的使用一、QMutexLocker和QMutex实现示例图二、QMutex和QMutexLocker的关系个人理解三、QMutex使用和QMutexLocker使用1.QMutex的使用2.QMutexLocker的使用 四、检验QMutexLocker是否将传入的互斥锁锁定1.操作解释2.CMoveFuncClass使用moveToThread实现使用QMutexLocker3.CThread类继承QThread实现单纯使用QMutex4.CMainWindow调用类 总结相关文章 Chapter1 Qt互斥锁(QMutex)的使用、QMutexLocker的使用 原文链接https://blog.csdn.net/wj584652425/article/details/123585126 一、QMutexLocker和QMutex实现示例图 下图为检测QMutexLocker是否上锁成功的示例图两个线程使用同一个QMutex源码在文章第四节源码含详细注释。 下图为不同QMutex运行时的效果该图表明两个线程无关并非sleep影响了另一个线程的运行 二、QMutex和QMutexLocker的关系个人理解 互斥锁QMutex在使用时需要在进入和结束的时候使用对应的函数锁定和解锁。在简单的程序中还好但是在结构复杂的程序中因为需要手动锁定和解锁很容易忽略细节而出现问题于是为了应对这种情况QMutexLocker便诞生了为了简化简化互斥锁的锁定和解锁。 QMutexLocker通常创建为局部变量QMutexLocker在创建时传入一个并未锁定若是锁定可用relock重新锁定或unlock解锁的QMutex指针变量并且会将QMutex变量锁定在释放时会将QMutex变量解锁。QMutexLocker创建时将传入的QMutex锁定释放时将传入的QMutex解锁 三、QMutex使用和QMutexLocker使用 1.QMutex的使用 void CThread::run() {//互斥锁锁定m_mutex-lock();//输出当前线程的线程IDqDebug() QThread::currentThreadId();//互斥锁解锁m_mutex-unlock(); }2.QMutexLocker的使用 void CThread::run() {//创建QMutexLocker的局部变量并将类中互斥锁指针传入此处互斥锁被locker锁定QMutexLocker locker(m_mutex);qDebug() QThread::currentThreadId();//当locker作用域结束locker将互斥锁解锁 }通过1、2的代码比较我们会发现QMutexLocker的代码中没有手动调用锁定和解锁由此可看出MutexLocker简化了互斥锁的锁定和解锁。 四、检验QMutexLocker是否将传入的互斥锁锁定 1.操作解释 使用两种实现方法完全不同线程测试 两个线程使用同一个互斥锁 一个线程使用QMutexLocker一个线程单纯使用QMutex 2.CMoveFuncClass使用moveToThread实现使用QMutexLocker CMoveFuncClass.h #ifndef CMOVEFUNCCLASS_H #define CMOVEFUNCCLASS_H#include QObject #include QMutexclass CMoveFuncClass : public QObject {Q_OBJECT public:explicit CMoveFuncClass(QObject *parent nullptr);~CMoveFuncClass();void setMutex(QMutex *mutex);public slots:void doSomething();private:QMutex * m_mutex; //定义一个互斥锁变量 };#endif // CMOVEFUNCCLASS_HCMoveFuncClass.cpp #include CMoveFuncClass.h#include QDebug #include QThreadCMoveFuncClass::CMoveFuncClass(QObject *parent): QObject(parent) { }CMoveFuncClass::~CMoveFuncClass() { }void CMoveFuncClass::doSomething() {//创建QMutexLocker的局部变量并将类中互斥锁指针传入此处互斥锁被locker锁定QMutexLocker locker(m_mutex);qDebug() 我的实现方法为moveToThread 开始3秒睡眠 使用QMutexLocker;qDebug() 线程ID QThread::currentThreadId();QThread::sleep(3); //设置线程睡眠3秒单位为秒qDebug() 我的实现方法为moveToThread 线程运行完成结束睡眠\n\n;//当locker作用域结束locker将互斥锁解锁 }void CMoveFuncClass::setMutex(QMutex *mutex) {m_mutex mutex; }3.CThread类继承QThread实现单纯使用QMutex CThread.h #ifndef CTHREAD_H #define CTHREAD_H#include QObject #include QThread #include QMutex #include QWaitConditionclass CThread : public QThread {Q_OBJECT public:explicit CThread(QObject *parent nullptr);~CThread();void run();void setMutex(QMutex *mutex);private:QMutex * m_mutex; //定义一个线程锁变量};#endif // CTHREAD_HCThread.cpp #include CThread.h #include QDebugCThread::CThread(QObject *parent): QThread(parent) { }CThread::~CThread() { }void CThread::run() {//互斥锁上锁m_mutex-lock();qDebug() 我的实现方法为继承QThread 开始3秒睡眠 单纯使用QMutex;qDebug() 线程ID QThread::currentThreadId();QThread::sleep(3); //设置线程睡眠3秒单位为秒qDebug() 我的实现方法为继承QThread 线程运行完成结束睡眠;//互斥锁解锁m_mutex-unlock(); }void CThread::setMutex(QMutex *mutex) {m_mutex mutex; }4.CMainWindow调用类 CMainWindow.h #ifndef CMAINWINDOW_H #define CMAINWINDOW_H#include QMainWindow #include CThread.h #include CMoveFuncClass.hnamespace Ui { class CMainWindow; }class CMainWindow : public QMainWindow {Q_OBJECTpublic:explicit CMainWindow(QWidget *parent 0);~CMainWindow();signals:void startMoveThread();private slots:void on_startBtn_clicked(); //触发方法二函数的信号private:Ui::CMainWindow *ui;CThread *m_cThread; //方法一指针CMoveFuncClass *m_moveFunc; //方法二指针QThread *m_thread; //方法二所移至的线程指针QMutex *m_mutex; //两个线程使用的线程锁 };#endif // CMAINWINDOW_HCMainWindow.cpp #include CMainWindow.h #include ui_CMainWindow.h#include QDebugCMainWindow::CMainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::CMainWindow) {ui-setupUi(this);/方法一/////new出CThread对象m_cThread new CThread;/方法二/////new一个moveToThread的接收线程并启动m_thread new QThread;//new出CMoveFuncClass对象m_thread-start(); //一定记得启动否则运行不了m_moveFunc new CMoveFuncClass;//连接相应信号槽connect(this, CMainWindow::startMoveThread, m_moveFunc, CMoveFuncClass::doSomething);connect(m_thread, QThread::finished, m_moveFunc, QObject::deleteLater);//将对象移至线程m_moveFunc-moveToThread(m_thread);//创建线程共用的互斥锁m_mutex new QMutex;//下方为m_mutex的地方更改为new QMutex则能实现第一节第二张图的效果m_cThread-setMutex(m_mutex);m_moveFunc-setMutex(m_mutex); }CMainWindow::~CMainWindow() {delete m_mutex;delete m_moveFunc;m_thread-exit();m_thread-wait(1);delete m_thread;m_cThread-exit();m_cThread-wait(1);delete m_cThread;delete ui; }void CMainWindow::on_startBtn_clicked() {//通过start启动方法一线程m_cThread-start();//发送信号启动方法二线程emit startMoveThread(); }运行上方的代码第一节第一张效果图可看出使用QMutexLocker的线程首先运行且代码中无锁定和解锁的操作但另外一个线程依然等该线程运行完成后运行由此可看出使用QMutexLocker是实现了互斥锁的锁定和解锁的。 总结 QMutexLocker提供的简化互斥锁锁定和解锁的机制在很多时候时蛮方便的在使用互斥锁的地方使用QMutexLocker会减去许多安全隐患不过在多线程循环输出ABC的时候好像就不适合该方法。所以使用类似的类还得按情况而定 相关文章 启动QThread线程的两种方法含源码注释 Qt互斥锁(QMutex)、条件变量(QWaitCondition)讲解QMutex实现多线程循环输出ABC含源码注释 QSemaphore的使用QSemaphore实现循环输出ABC含源码注释 QRunnable线程、QThreadPool线程池的使用含源码注释 Qt读写锁QReadWriteLock的使用、读写锁的验证含源码注释 Qt读写锁QWriteLocker、QReadLocker的理解和使用含部分源码 Qt之线程运行指定函数含源码注释优化速率 友情提示——哪里看不懂可私哦让我们一起互相进步吧 创作不易请留下一个免费的赞叭 谢谢 o/) 注文章为作者编程过程中所遇到的问题和总结内容仅供参考若有错误欢迎指出。 注如有侵权请联系作者删除
http://www.dnsts.com.cn/news/208752.html

相关文章:

  • 石家庄自己的网站做美食介绍的网站
  • 网站从哪几个方面维护网站模板制作教程视频教程
  • 湖南网站设计公司seo网络营销课程
  • 网站编程设计心得体会文件管理系统
  • 学做川菜网站建设部网站四库一平台
  • 镇江网站建设个天元建设集团有限公司七公司
  • 记事本做的网站链接怎么装饰关于网站建设的通知
  • 长春网站建设专业公司广州发布最新通知
  • 网站注册页面跳出怎么做宁波网页设计机构
  • 哪里可以做网站wordpress去除谷歌字体
  • 益阳市建设网站好用的网站开发框架
  • python 做网站 用哪个框架好公司名字变了网站备案
  • 专做it招聘的网站怎么才能搜索到自己做的网站
  • 做网站代理商北京网络营销推广外包
  • 网站建设html5模板北京市违法建设投诉网站
  • 怎么开发网站农产品电商网站的建设需求
  • 连云港新站优化网站建设公司薪资
  • 吴中区做网站的公司南昌整站优化
  • 织梦资讯门户网站模板互联网十大创业项目
  • 网站生成器怎么做用源码做自己的网站
  • 属于门户网站的有番禺网站开发服务
  • 建设网站需要花多少钱网络架构师工资一般多少
  • 淘宝优惠的网站怎么做网站dns查询
  • 四川航天中瑞建设工程有限公司网站网站开发协议百度
  • 如何创建外卖网站seo网站外链专发
  • 普通网站建设是什么大理公司网站建设
  • 建材有限公司光速东莞网站建设三九手机网官网
  • 百度商桥代码怎么加到网站上进入网站服务器怎么做
  • 网站是什么样子的企业展示网站模板免费下载
  • wordpress如何按分类分栏seo关键词排名优化系统源码