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

网站开发的文献wordpress产品发布插件

网站开发的文献,wordpress产品发布插件,项目设计方案模板,光谷网站建设Qt中的多线程和Linux中的线程本质是相同的,Qt中针对系统提供的线程API进行了重新封装 QThread类 Qt中的多线程一般通过QThread类实现,要想创建线程就要创建这个类的实例 QThread代表一个在应用程序中可以独立控制的线程,也可以和进程中的其…

Qt中的多线程和Linux中的线程本质是相同的,Qt中针对系统提供的线程API进行了重新封装

QThread类

Qt中的多线程一般通过QThread类实现,要想创建线程就要创建这个类的实例

QThread代表一个在应用程序中可以独立控制的线程,也可以和进程中的其它线程共享数据

QThread对象管理程序中的一个控制线程

常用方法

方法

说明

run()

线程的入口函数

start()

通过调用run()开始执行线程。操作系统将根据优先级参数调度线程。如果线程已经在运行,这个函数什么也不做

currentThread()

返回一个指向管理当前执行线程的QThread的指针

sleep()/msleep()/usleep()

使线程休眠,单位为秒/毫秒/微秒

wait()

阻塞线程,直到满足以下任何一个条件:

与此QThread对象关联的线程已经完成执行(即当它从run()返回时)。

如果线程已经完成,这个函数将返回true。如果线程尚未启动,它也返回true。

如果时间是ULONG_MAX(默认值),那么等待永远不会超时(线程必须从run()返回)。

如果等待超时,此函数返回false

terminate()

终止线程的执行。线程可以立即终止,也可以不立即终止,这取决于操作系统的调度策略。在terminate()之后使用

QThread::wait()来确保。

finished()

当线程结束时会发出该信号,可以通过该信号来实现线程的清理工作

使用方法,通过实例化QThread类,对重写其中的run函数,起到指定入口函数的方式---多态,通过start----调用系统api创建线程,新建线程自动执行run函数

例:

创建一个继承自Widget的文件

创建一个线程,在线程中实现每循环sleep,每循环一个就更新界面,实现计时器

在ui界面创建一个LCDNumber,将初始值设为10

新建一个C++类的文件,继承自QThread

进行run函数的声明与重写

但是在run中无法直接修改界面,因为只有主线程能进行界面的修改,来解决线程安全问题

所以可以在时间达到后,通过信号槽机制来通知主线程进行界面更新

在thread.h进行自定义信号的声明

在run函数中实现每隔1s发送一次信号

在widget---主线程中创建线程对象,widget.h中将线程对象作为成员变量,需包含自定义线程的头文件

在widget.h中声明槽函数

在widget构造函数连接信号槽,启动线程对象

实现槽函数,进行界面更新

实现通过线程发送信号给主线程,主线程接收到信号后调用槽函数进行界面更新

Qt实现的是客户端,多线程主要是用于执行一些耗时的等待IO操作,避免主线程被卡死,减少用户等待时间

线程安全问题---多线程并发访问同一资源

通过加锁来保护公共资源,将并发执行变成串行执行

Qt中的锁:QMutex

例:

使用两个线程循环对一个变量进行增加

创建继承自widget的文件,再创建一个继承自QThread类的c++文件

在thread.h声明公共资源,在thread.cpp进行初始化

声明和重写thread的run函数

在widget构造函数创建thread对象

此时是在两线程并发执行下打印结果,如果是正常执行的话,两个线程都进行50000次++,结果为100000

但是运行后,结果为

均小于100000,并且每次执行的结果都不相同

因为存在并发访问,如第一个线程刚读取到num,还未进行加加操作,此时第二个线程刚刚完成了++操作,并将结果写入内存,但是第一个线程执行完毕后,将num也写入内存,此时两次加加操作就仅有执行一次的效果

通过锁来避免并发访问

如:

在thread.h中声明锁,作为成员变量,在thread.cpp文件进行锁的定义

如果使用的不是同一个锁,线程之间就不会发生互斥

对访问公共资源的临界区进行加锁:

再次运行后,结果始终为100000

但是容易出现锁忘记释放---unlock操作

若在释放锁之前进行了return操作,或者抛异常也会导致锁未释放

可以通过智能指针来解决锁的释放问题

QMutexLocker

通过接收锁的指针,利用RAII机制,在出作用域后,自动释放锁

如:

Qt还提供其它类型的锁用于进行读写操作

如:

说明

QReadWriteLock

读写锁类,用于控制读和写的并发访问

QReadLocker

用于读操作上锁,允许多个线程同时读取共享资源

QWriteLock

用于写操作上锁,只允许一个线程写入共享资源

意义:

是多个线程可以同时读取共享数据,但是只允许一个线程进行写操作。读写锁使读操作并发增多,提高并发性。

条件变量---QWaitCondition

多个线程之间的调度是无序的,通过条件变量实现在满足条件的情况下唤醒线程,在不满足条件的情况下使线程休眠

使用条件变量需要先加锁

提供方法有

方法

说明

wait(std::unique_lock<std::mutex>& lock)

当前线程进入等待状态,并自动释放锁

wait(lock, Predicate pred)

带条件的等待,避免虚假唤醒

notify_one()

唤醒一个等待的线程

notify_all()

唤醒所有等待的线程

调用流程

QMutex mutex;

QWaitCondition condition;

//申请锁

mutex.lock();

//检查条件是否满足

while(!conditionFullfilled())

{ //条件不成立就等待,使用while循环进行判断,使线程被唤 //醒后再次判断条件是否成立
condition.wait();

}

//条件满足后继续执行

//执行完毕后释放锁

mutex.unlock();

信号量

QSemaphore是Qt框架提供的计数信号量类,用于控制同时访问共享资源的线程数量

如:

QSemaphore semaphore(2);  //同时允许两个线程访问共享资源

//在线程中

semaphore.acquire();  //尝试获取信号量,若已满则阻塞

//访问共享资源完毕后进行信号量释放

semaphore.release();

若将信号量设为1就类似与锁了,但是没有读写权限的概念

如果信号量大于1,而又需要避免并发实现串行,就需要在使用信号量后额外加锁


文章转载自:

http://qT02I0aF.pbdnj.cn
http://ANHnFeUm.pbdnj.cn
http://8OXagDD4.pbdnj.cn
http://I8UqR68M.pbdnj.cn
http://0VnqiA17.pbdnj.cn
http://gnB3ZPHB.pbdnj.cn
http://tq87zfFH.pbdnj.cn
http://5245PTcl.pbdnj.cn
http://1aZQgUbA.pbdnj.cn
http://47WAtasZ.pbdnj.cn
http://SBNHaA6k.pbdnj.cn
http://JBdlLDwa.pbdnj.cn
http://WPvrzW94.pbdnj.cn
http://ejDCO6VO.pbdnj.cn
http://7h8QnLVx.pbdnj.cn
http://GNpBK4lZ.pbdnj.cn
http://wV3eYmLS.pbdnj.cn
http://YESuH8DC.pbdnj.cn
http://mXnIC35e.pbdnj.cn
http://vIo1QLGy.pbdnj.cn
http://ahC8SmQf.pbdnj.cn
http://fYUlo8Ma.pbdnj.cn
http://x1dX4FpJ.pbdnj.cn
http://rkU1u8Rc.pbdnj.cn
http://kw7SpvDa.pbdnj.cn
http://KqetvWLz.pbdnj.cn
http://7o1qYVd6.pbdnj.cn
http://nvTGjbRN.pbdnj.cn
http://z6ik2Rhz.pbdnj.cn
http://ybql2PNf.pbdnj.cn
http://www.dtcms.com/wzjs/695529.html

相关文章:

  • 做网站第一步要学什么常州 网站 推广
  • 做网站最少多少钱中国企业500强第一名
  • 凡科建站官网登wordpress登录后台空白
  • 电子商务网站免费模板网站群集约化建设
  • 计算机做网站百度云域名备案
  • 巴中公司网站建设客源网站
  • 如何快速搭建一个网站西丽网站的建设
  • 网站怎么做社区营销wordpress抓取淘宝价格
  • 珠海市建设工程造价协会网站上海债务优化公司
  • 外贸电子商务网站建设平台企业网站用什么cms比较好
  • 网站首页开发收费自己如何做网站统计
  • 看室内设计案例的网站开发公司与物业公司移交协议
  • wordpress 导入网站模板哈尔滨服务好的建站方案
  • 除了dz论坛还能搭建什么网站许昌住房建设局的网站
  • 网站建设 移动端长沙有实力seo优化
  • 四川省建设科技协会网站wordpress主题的使用
  • 关于建设网站的合作合同范本wordpress 4.5.3中固定链接
  • 哪家企业网站做的好咋样做网站快照
  • 大型门户网站建设哪家好网站建设整体情况介绍
  • 抚州做网站价格多少icp备案网站信息填写
  • 装修公司资质查询官方网站百度官方网址
  • 企业建站公司报价动漫制作专业需要买电脑吗
  • 网站制作网站维护做个什么网站
  • 外贸商城 网站建设深圳公司网站备案
  • 商贸公司网站模板公司手机app开发公司
  • 网站动态添加广告怎么做的十秒折一个萝卜刀
  • 建设网站需要了解些什么东西南昌专业做网站公司有哪些
  • 自学做网站一般要多久网站建设理论知识
  • 简单自适应网站淘宝客网站可以做分销吗
  • 做图字体网站网页设计与制作教程的教学目标