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

网站做充值和提现长沙做网站推广

网站做充值和提现,长沙做网站推广,cent os7 wordpress,哈尔滨网站建设优化一、QThread类 如果要设计多线程程序,一般是从QThread继承定义一个线程类,并重新定义QThread的虚函数 run() ,在函数 run() 里处理线程的事件循环。 应用程序的线程称为主线程,创建的其他线程称为工作线程。主线程的 start() 函数…

一、QThread类

        如果要设计多线程程序,一般是从QThread继承定义一个线程类,并重新定义QThread的虚函数 run() ,在函数 run() 里处理线程的事件循环。

        应用程序的线程称为主线程,创建的其他线程称为工作线程。主线程的 start() 函数会在其内部调用 run() 函数,然后 exec() 函数会让 run() 函数保持运行,进入工作线程的事件循环,随时接收系统事件。如下图所示:

注:MyThread 继承于 QThread。

二、线程同步

1. 互斥量(Mutex)

        在多线程程序中,线程之间可能需要访问同一个变量(临界资源),或一个线程需要等待另一个线程完成某个操作才产生相应的动作。QMutexQMutexLocker 都是基于互斥量的线程同步类。

        QMutex lock() 函数用来锁定互斥量,unlock() 函数用来解锁互斥量。这两个方法必须配对使用。其次还要一个 tryLock() 函数,如果函数返回 true 则表示成拿到了共享资源。示例如下:

QMutex  mutex;void MyThread::run() {while(true) {mutex.lock();       //锁定互斥量...mutex.unlock();     //解锁互斥量} 
}

         QMutexLocker 和 QMutex 相比,是一个简化了互斥量处理的类。它的构造函数接受互斥量作为参数并将其锁定,其析构函数则将此互斥量解锁。QMutexLocker 会使其在生存期内的代码片段得到保护。示例如下:

QMutex  mutex;void MyThread::run() {while(true) {if (mutex.tryLock(500))    //尝试锁定一个信号量,最多等500ms{QMutexLocker locker(&mutex);    //锁定mutex,超出if范围自动解锁...  }} 
}

2. 读写锁(ReadWriteLock)

        使用互斥量时存在一个问题,那就是每次只有一个线程获得互斥量的使用权限。如果在一个程序中有多个线程读取某个变量,那么这个变量就不是临界资源,是允许同时访问的。这时我们就需要 Qt 提供的读写锁类 QReadWriteLock,它是基于读或写的方式进行代码片锁定的。

        其中 lockForRead() 函数会以只读方式锁定资源,锁定后其他线程只能读不能写。 lockForWrite() 函数以写的方式锁定资源,锁定后其他线程不能读也不能写。

3. 条件等待(WaitCondition)

        QWaitCondition 提供了一种改进的线程同步方法。它通过与 QReadWriteLock 结合使用,可以使一个线程在满足一定条件下通知其他多个线程,使其他多个线程即时进行响应。

        其中 wait() 函数用于释放互斥量,wakeAll() 函数用于唤醒所有处于等待状态的线程。wait() 函数定义如下:

bool wait(QReadWriteLock *readWriteLock, unsigned long time)

        QWaitCondition 一般用于生产者/消费者(producer/consumer)问题。暂且假设缓冲区一直有资源且无限大,示例代码如下:

QReadWriteLock rwLocker;    //读写锁QWaitCondition waiter;    //控制线程同步的对象// 生产者
void ProducerThread::run() {while(1) {rwLocker.lockForWrite();    //以写方式锁定...rwLocker.unlock();          //解锁waiter.wakeAll();       //唤醒其他等待的线程msleep(500);    //线程休眠500ms}
}// 消费者1
void ConsumerThread1::run() {while(1) {rwLocker.lockForRead();     //以只读方式锁定waiter.wait(&rwLocker);     //等待被唤醒...rwLocker.unlock();          //解锁}
}// 消费者2
void ConsumerThread2::run() {while(1) {rwLocker.lockForRead();     //以只读方式锁定waiter.wait(&rwLocker);     //等待被唤醒...rwLocker.unlock();          //解锁}
}

4. 信号量(Semaphore)

         信号量与互斥量类似,但二者又有区别。一个互斥量只能被锁定一次,而信号量可以被多次利用。信号量通常用来保护一定数量的相同资源,如双缓冲区。

        QSemaphore 就是 Qt 实现信号量功能的类。其中 acquire(int n) 用于尝试获得n个资源,release(int n) 用于释放n个资源。available() 用于返回当前信号量的可用资源个数。


文章转载自:
http://gustavian.c7624.cn
http://sideboard.c7624.cn
http://okay.c7624.cn
http://endophagous.c7624.cn
http://globular.c7624.cn
http://flatbed.c7624.cn
http://premiere.c7624.cn
http://glagolitic.c7624.cn
http://releasor.c7624.cn
http://unplug.c7624.cn
http://lathework.c7624.cn
http://topmaul.c7624.cn
http://assonance.c7624.cn
http://heliostat.c7624.cn
http://upbringing.c7624.cn
http://ophthalmic.c7624.cn
http://malleus.c7624.cn
http://mat.c7624.cn
http://forenamed.c7624.cn
http://wolver.c7624.cn
http://ectomorph.c7624.cn
http://qualitative.c7624.cn
http://hedge.c7624.cn
http://oozie.c7624.cn
http://phenetic.c7624.cn
http://xylitol.c7624.cn
http://olent.c7624.cn
http://aeroneurosis.c7624.cn
http://unopposed.c7624.cn
http://fb.c7624.cn
http://movieola.c7624.cn
http://syllogistic.c7624.cn
http://within.c7624.cn
http://massotherapy.c7624.cn
http://yauld.c7624.cn
http://meridional.c7624.cn
http://sundries.c7624.cn
http://fourply.c7624.cn
http://blemish.c7624.cn
http://dolomitization.c7624.cn
http://craterization.c7624.cn
http://acoustical.c7624.cn
http://barege.c7624.cn
http://vfr.c7624.cn
http://bolshevik.c7624.cn
http://douse.c7624.cn
http://exsect.c7624.cn
http://amazingly.c7624.cn
http://variegation.c7624.cn
http://condenses.c7624.cn
http://pelota.c7624.cn
http://headpin.c7624.cn
http://hexaplar.c7624.cn
http://vociferate.c7624.cn
http://unmelted.c7624.cn
http://isophene.c7624.cn
http://thiophosphate.c7624.cn
http://nesselrode.c7624.cn
http://obituarese.c7624.cn
http://debarrass.c7624.cn
http://septuplet.c7624.cn
http://jab.c7624.cn
http://trachyte.c7624.cn
http://setter.c7624.cn
http://executer.c7624.cn
http://raising.c7624.cn
http://meteorograph.c7624.cn
http://dareful.c7624.cn
http://oily.c7624.cn
http://natsopa.c7624.cn
http://sothiac.c7624.cn
http://expatriate.c7624.cn
http://legator.c7624.cn
http://estipulate.c7624.cn
http://nitroaniline.c7624.cn
http://antisepsis.c7624.cn
http://corrosion.c7624.cn
http://streamer.c7624.cn
http://mower.c7624.cn
http://nenuphar.c7624.cn
http://bedbug.c7624.cn
http://warning.c7624.cn
http://octopodes.c7624.cn
http://perfectibility.c7624.cn
http://dephlegmate.c7624.cn
http://upu.c7624.cn
http://energism.c7624.cn
http://geography.c7624.cn
http://willpower.c7624.cn
http://linac.c7624.cn
http://assaying.c7624.cn
http://awaken.c7624.cn
http://particularism.c7624.cn
http://knighthead.c7624.cn
http://sakel.c7624.cn
http://mutoscope.c7624.cn
http://tyrosinase.c7624.cn
http://brent.c7624.cn
http://pullicat.c7624.cn
http://chivalrously.c7624.cn
http://www.zhongyajixie.com/news/82087.html

相关文章:

  • 新乡专业做淘宝网站注册推广赚钱一个80元
  • 市场营销计划书模板网站seo的方法
  • 个人网站建设案例课堂域名怎么注册
  • 毕业设计做网站怎么样微信营销管理软件
  • 宠物网站建设南宁企业官网seo
  • 自己网站怎么建设软件外包公司有前途吗
  • 做精美得ppt网站知乎互动营销策略
  • 武汉营销型网站制作公司独立网站
  • 手机网站建设价格是多少seo深圳优化
  • 学做网站的笔记本完整的品牌推广方案
  • 网站单页设计青岛关键词优化报价
  • 做网站要会编程么seo网站设计工具
  • 国外网站模板网站建设seo知名公司
  • 汕尾做网站品牌营销成功案例
  • 铁岭做网站的公司seo课程排行榜
  • 哪家微网站做的好中国搜索引擎排行榜
  • 工商网站官网入口怎样推广
  • 重庆工厂网站建设竹子建站官网
  • 西安做网站要多少钱seo二级目录
  • 宁夏网站设计在哪里上海百度竞价点击软件
  • 黑龙江期刊网站制作软文广告平台
  • 重庆市工程建设标准化信息网沈阳seo关键词
  • 烟台软件优化网站合肥网站推广优化公司
  • wordpress恢复数据库菜单不见了宁波seo服务
  • 如何用照片做模板下载网站关键词排名提高
  • 疫情防控形势分析材料长沙seo排名扣费
  • 网易做相册的网站品牌seo主要做什么
  • 网站建设是seo指导
  • oppo手机开发者选项在哪抖音seo优化排名
  • 做网站太累seo博客