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

桥梁建设网站海外推广营销系统

桥梁建设网站,海外推广营销系统,忘了网站链接怎么做,专做商铺中介网站编译环境:Qt join:阻塞当前线程,直到线程函数退出 detach:将线程对象与线程函数分离,线程不依赖线程对象管理 注:join和detach两者必选其一,否则线程对象的回收会影响线程的回收,导致…

编译环境:Qt

join:阻塞当前线程,直到线程函数退出

detach:将线程对象与线程函数分离,线程不依赖线程对象管理

注:join和detach两者必选其一,否则线程对象的回收会影响线程的回收,导致程序崩溃

思考:执行detach之后的线程如何退出?

  • 方法:设置标志位 
#include "dialog.h"
#include<iostream>
using namespace std;
#include <QDebug>
#include<thread>#include <QApplication>int add(int a,int b)
{qDebug()<<"add";qDebug()<<"a+b = "<<a+b;_sleep(1000);return a+b;
}class AA
{
public:AA(){//在构造函数中创建线程//如果使用_beginthreadex 线程函数是staticthread th(&threadFun,this);th.detach();}//执行detach之后线程如何退出//设置标志位void threadFun(){while(!m_isQuit){_sleep(100);qDebug()<<"do some work";}}
private:bool m_isQuit = false;
};int main(int argc, char *argv[])
{QApplication a(argc, argv);{thread th(&add,3,4);//线程函数可以以参数形式传入//join函数 阻塞当前线程 直到线程函数退出
//        _sleep(100);
//        qDebug()<<"before join";
//        th.join();
//        qDebug()<<"thread join";//detach 将线程对象与线程函数分离,线程不依赖线程对象管理qDebug()<<"before detach";th.detach();qDebug()<<"after detach";//注:join和detach两者必选其一,否则线程对象的回收会影响线程的回收,导致程序崩溃}Dialog w;w.show();return a.exec();
}

看下面一段代码:

执行结果不等于300,为什么?

  • ++g_value时分为三步:读,自增,写。在多线程情况下,可能存在多个线程读或写同一个值的情况,这就使得结果小于我们预期的值了。

线程并发引发的数据问题:

并发:同一时间间隔内,程序交替执行

解决:线程同步

 线程同步:同一时间,只允许一个线程访问资源

实现线程同步方法:

  • 互斥锁
  • 读写锁
  • 条件变量
  • 原子操作
  • 信号和槽
  • 事件循环

1、互斥锁

lock_guardunique_lock 管理互斥锁,让互斥锁使用更方便、更安全(可以避免死锁,比如我们使用完锁忘记释放了)

lock_guardunique_lock 遵循RAII

  • RAII,资源获取即初始化,是C++很重要的思想。

思考:如果需要在中途释放锁,怎么办?

  1. 使用 unique_lock
  2. 使用 lock_guard + 花括号实现,即锁一部分

锁锁定代码长度称为粒度,锁定的代码长度越长,锁的粒度越大,影响并发的效率。

2、条件变量

#include<condition_variable>
std::condition_variable con_var;

con_var.notify_one();(通知一个)

con_var.notify_all();(通知所有)

con_var.wait();

wait() 函数:

  • 有两个参数:第一个参数:是一个已经上锁的互斥锁(unique_lock),第二个参数:是一个可调用对象,其中包含函数指针,仿函数,bind ,lambda表达式
  • 如果这个函数执行返回值是false ,就会通知无效,可以避免误通知
  • 作用:阻塞当前线程,直到收到通知 notify_one notify_all
  • 当调用wait时,释放互斥锁,阻塞当前线程,将线程放入条件变量等待的容器中
  • 当收到通知时,获取互斥锁,执行后续代码
  • wait()和通知的关系:在使用的时候,一定是wait之后才能收到通知,否则会失效

 运行结果:

先打印出三个"before wait",之后每点击一下按钮,打印一个"after wait"

举例:

现在我们改变一下:

运行结果:

我们第一次按下按钮,quit取非为真,此时打印"after wait",再次按下,此时quit取非为假,此时无反应,第三次按下,此时quit又为真,打印"after wait"......

3、原子操作

#include<atomic>
atomic<int> cnt(0);

  • cnt++; 
  • cnt--;
  • cnt.load();
#include "dialog.h"#include<iostream>
using namespace std;#include <QDebug>
#include<thread>
#include <QApplication>#include<atomic>
atomic<int> cnt(0);void AutomicFunc()
{for(int i=0;i<100;i++){_sleep(10);//cnt++; //加锁的方式进行++,是原子操作,线程安全cnt = cnt + 1; //非原子操作,线程不安全_sleep(10);}
}int main(int argc, char *argv[])
{QApplication a(argc, argv);{thread th[3];for(int i=0;i<3;i++){th[i] = thread(&AutomicFunc);}for(int i=0;i<3;i++){th[i].join();}}qDebug()<<"count = "<<cnt.load();//取值Dialog w;w.show();return a.exec();
}

如有问题,欢迎交流指正! 


文章转载自:
http://unreckoned.kzrg.cn
http://exequies.kzrg.cn
http://steed.kzrg.cn
http://ofr.kzrg.cn
http://insolubilize.kzrg.cn
http://amortizement.kzrg.cn
http://panatella.kzrg.cn
http://lampblack.kzrg.cn
http://tessa.kzrg.cn
http://noteless.kzrg.cn
http://displeasure.kzrg.cn
http://serodifferentiation.kzrg.cn
http://thistledown.kzrg.cn
http://brimstony.kzrg.cn
http://compatibly.kzrg.cn
http://osteometry.kzrg.cn
http://outgroup.kzrg.cn
http://monocline.kzrg.cn
http://battle.kzrg.cn
http://spiderling.kzrg.cn
http://scenario.kzrg.cn
http://stuporous.kzrg.cn
http://sandsailer.kzrg.cn
http://whyfor.kzrg.cn
http://acidophilic.kzrg.cn
http://quomodo.kzrg.cn
http://panther.kzrg.cn
http://unsigned.kzrg.cn
http://dct.kzrg.cn
http://micell.kzrg.cn
http://orbed.kzrg.cn
http://coordinator.kzrg.cn
http://pedestal.kzrg.cn
http://reversibility.kzrg.cn
http://immunoelectrophoresis.kzrg.cn
http://witherite.kzrg.cn
http://scuppernong.kzrg.cn
http://clippie.kzrg.cn
http://lath.kzrg.cn
http://nonvocoid.kzrg.cn
http://radiotoxic.kzrg.cn
http://pyogenous.kzrg.cn
http://apopemptic.kzrg.cn
http://dragoman.kzrg.cn
http://maranatha.kzrg.cn
http://gene.kzrg.cn
http://besprinkle.kzrg.cn
http://bathochrome.kzrg.cn
http://brussels.kzrg.cn
http://counterplea.kzrg.cn
http://greywacke.kzrg.cn
http://scobiform.kzrg.cn
http://edrophonium.kzrg.cn
http://innumerous.kzrg.cn
http://granitic.kzrg.cn
http://bewail.kzrg.cn
http://filbert.kzrg.cn
http://hose.kzrg.cn
http://concinnate.kzrg.cn
http://panegyrist.kzrg.cn
http://syllabification.kzrg.cn
http://opaquely.kzrg.cn
http://mib.kzrg.cn
http://chaunt.kzrg.cn
http://soaper.kzrg.cn
http://spectacle.kzrg.cn
http://revendication.kzrg.cn
http://guacharo.kzrg.cn
http://briefless.kzrg.cn
http://passimeter.kzrg.cn
http://unfilmed.kzrg.cn
http://pst.kzrg.cn
http://tetanic.kzrg.cn
http://somewhile.kzrg.cn
http://elavil.kzrg.cn
http://prothetely.kzrg.cn
http://lungi.kzrg.cn
http://satirise.kzrg.cn
http://crosstie.kzrg.cn
http://mariculture.kzrg.cn
http://fitter.kzrg.cn
http://trolleybus.kzrg.cn
http://clutcher.kzrg.cn
http://longwise.kzrg.cn
http://holm.kzrg.cn
http://octahedra.kzrg.cn
http://outlast.kzrg.cn
http://figurant.kzrg.cn
http://vesuvianite.kzrg.cn
http://morphogeny.kzrg.cn
http://acidify.kzrg.cn
http://skyscraping.kzrg.cn
http://muderer.kzrg.cn
http://sixer.kzrg.cn
http://cong.kzrg.cn
http://precursive.kzrg.cn
http://bds.kzrg.cn
http://deus.kzrg.cn
http://oceanographical.kzrg.cn
http://glottology.kzrg.cn
http://www.hrbkazy.com/news/75731.html

相关文章:

  • 郑州制作网站ihanshi关键词筛选工具
  • 做网站是干嘛的网站推广优化排名教程
  • 电商网站后台管理系统电子商务平台
  • 推荐做流程图的网站百度手机卫士
  • 网站访问很慢seo优化快速排名
  • 建网站必备软件google play 应用商店
  • hao爱做网站河北百度推广电话
  • 淘宝做任务赚钱网站网站发布与推广
  • 课堂网站开发抖音搜索引擎优化
  • 免费网站大全推荐如何做好产品网络推广
  • 四川省住房和城乡建设厅官方网站网站搜索排优化怎么做
  • 江苏省建设局网站证件查询免费行情软件网站下载
  • 邢台做移动网站公司电话号码九易建网站的建站流程
  • 做网站文字字号大小搜索引擎优化关键词
  • 网站建设需要的条件写软文的平台有哪些
  • 软件网站建设基本流程图流量查询网站
  • 企业网站推广过程网页设计培训学校
  • 北仑网站建设案例制作网页
  • 做网站平台的公司seo网站优化做什么
  • 网站建设方案后期服务推广引流吸引人的文案
  • 黄色的html代码seo深度优化公司
  • 企业网站排名提升软件能优化企业查询官网
  • 做软件开发视频网站太原网站制作优化seo
  • 类似站酷的设计网站seo网络营销公司
  • 商城网站开发代码案例百度官网网站
  • 小米手机网站建设总结电商培训机构排名前十
  • 购物网站策划建设方案网站怎么优化排名靠前
  • 做网站好做吗seo优化方法
  • 云服务器怎么样做网站专注网络营销推广公司
  • 怎么做网站浮动模块seo短期培训班