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

做外贸英语要什么网站朱晓宇 大庆 seo 网站建设 北京

做外贸英语要什么网站,朱晓宇 大庆 seo 网站建设 北京,ui设计经典案例,学设计的网站都有哪些一、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://www.15wanjia.com/news/169955.html

相关文章:

  • ps网站子页怎么做的在职考研哪个网站做的好
  • 西安手机网站制作公司织梦者网站模板
  • 务川自治县建设局网站个人如何接外包项目
  • 如何添加网站图标平台广告投放
  • 简约 网站模板wordpress嵌入网页
  • 电商网站建设 数商云网站开发的经济可行性分析
  • 招聘网站做销售怎么样工会网站建设可以
  • 昆明网站运营北京百度seo排名公司
  • 网站权重和什么有关没有网站怎么做链接视频教程
  • 六安网站建设费用网站开发项目启动成本
  • 网站设计配色怎么做完整的营销策划方案
  • 河南省法制建设研究会网站电商网站制作教程
  • 免费申请个人网站深圳网站建设制作公司
  • 用什么软件做楼盘微网站php网站开发干嘛的
  • 如何做一网站门户网站有哪些
  • 网站自适应是什么做的买卖域名的网站好
  • 如何建造网站怎么查看网站死链接
  • 门户网站集群建设方案帮别人做违法网站会判刑吗
  • 广东省建设监理协会网站 首页开发网站用什么软件
  • wordpress 菜单函数天津seo外包团队
  • 建设银行网站登录wordpress木木主题
  • 有哪些网站是做数据展示网站模板移植
  • 网站 集约化建设 汇报主流开发工具有哪些
  • 网站分为哪些部分组成部分组成网站建设具体工作总结
  • 建设银行行号查询网站店铺装修
  • 湖南网站seo找行者seo外贸网站建设公司流程
  • 网站建设需求登记表用visual做的网站
  • 996建站网站建设微商货源网站源码
  • 做好的网站怎么链接广东建设协会网站
  • 公司网站公司哪家好dw响应式网站模板下载