Qt之锁
2024-09-03 20:11:58
mythread.h:
#ifndef MYTHREAD_H
#define MYTHREAD_H #include <QObject>
#include<QMutex>
class MyThread : public QObject
{
Q_OBJECT
public:
explicit MyThread(QMutex *_q,int *_x,QObject *parent = nullptr);
signals:
public slots:
void working();
private:
int * x;
QMutex *q;
}; #endif // MYTHREAD_H
mythread.cpp:
#include "mythread.h"
#include<QDebug>
#include<QMutex>
MyThread::MyThread(QMutex *_q,int* _x,QObject *parent)
: QObject(parent),x(_x),q(_q)
{ }
void MyThread::working()
{
qDebug()<<"线程启动了"<<"object_name"<<this->objectName()<<endl;
for(int i=0;i<500000;i++)
{
q->lock();
int temp=*x;
temp++;
*x=temp;
q->unlock();
}
qDebug()<<"线程结束了"<< "x="<<*x<<"object_name"<<this->objectName()<<endl;
}
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include"mythread.h"
#include<QThread>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QMutex *mutex=0,int _value=0,QWidget *parent = 0);
~Widget();
private:
int value;
MyThread *t1;
MyThread *t2;
QThread *w1;
QThread *w2;
QMutex *mutex;
}; #endif // WIDGET_H
widget.cpp:
#include "widget.h"
#include "mythread.h"
Widget::Widget(QMutex *mutex,int _value,QWidget *parent)
: QWidget(parent),value(_value)
{
mutex=new QMutex;
t1=new MyThread(mutex,&value);
t2=new MyThread(mutex,&value);
w1=new QThread(this);
w2=new QThread(this);
t1->setObjectName("t1");
t2->setObjectName("t2");
t1->moveToThread(w1);
t2->moveToThread(w2); connect(w1,SIGNAL(started()),t1,SLOT(working()));
connect(w2,SIGNAL(started()),t2,SLOT(working()));
connect(w1,SIGNAL(finished()),t1,SLOT(deleteLater()));
connect(w2,SIGNAL(finished()),t2,SLOT(deleteLater()));
w1->start();
w2->start();
} Widget::~Widget()
{
w1->quit();
w1->wait();
w2->quit();
w2->wait();
delete mutex;
}
效果:
其中这所可以找个托管的:
效果:
智能锁一般应用于比较短的函数:
如果写成:
就锁不住了。
最新文章
- gitlab使用个人版v16.11
- JavaScript css-dom
- membership db注册工具
- Java 中使用 UEditor 整理【待续。。。】
- C语言运算符优先级表
- 针对目前高校移动App的火热,哥决定点一把火
- 说说CSS学习中的瓶颈
- B - Maya Calendar(第二季水)
- C# 继承细节
- hdu(2062)-Subset sequence 组合数学
- 关于wxpython多线程研究包括(import Publisher错误研究)
- Windows 下使用 工具修改文件的 时间
- Day03(黑客成长日记)------>;元祖及列表的增减改查
- 从一次线上故障思考Java问题定位思路
- Spark简介安装和简单例子
- Vue系列之 =>; 组件切换
- MVC的Forms登录验证
- C#学习笔记(2)——操作sqlite数据库增删改查
- codeforces水题100道 第二十五题 Codeforces Round #197 A. Helpful Maths (Div. 2) (strings)
- dbt macro 说明