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

甘肃建设职工教育培训中心网站计算机网站建设招聘

甘肃建设职工教育培训中心网站,计算机网站建设招聘,怎么用源码做网站,做网站练手基础 一个线程处理窗口事件,其他线程进行逻辑运算 在QT中使用多线程,需要额外注意的: 1)默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新 2)子线程负责后台…

基础

一个线程处理窗口事件,其他线程进行逻辑运算

在QT中使用多线程,需要额外注意的:
1)默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新
2)子线程负责后台的业务逻辑处理子线程中不能对窗口对象做任何操作,这些事情需要交给窗口线程处理
3)主线程子线程之间如果要进行数据的传递,需要使用Qt中的信号槽机制

线程类QThread

常用工共成员函数
// 构造函数
QThread::QThread(QObject *parent = Q_NULLPTR);// 判断线程中的任务是不是处理完毕了
bool QThread::isFinished() const;// 判断子线程是不是在执行任务
bool QThread::isRunning() const;// 得到当前线程的优先级
Priority QThread::priority() const;// 设置线程优先级
void QThread::setPriority(Priority priority);
优先级:QThread::IdlePriority         --> 最低的优先级QThread::LowestPriorityQThread::LowPriorityQThread::NormalPriorityQThread::HighPriorityQThread::HighestPriorityQThread::TimeCriticalPriority --> 最高的优先级QThread::InheritPriority      --> 子线程和其父线程的优先级相同, 默认是这个// 退出线程, 停止底层的事件循环
// 退出线程的工作函数
void QThread::exit(int returnCode = 0);
// 调用线程退出函数之后, 线程不会马上退出,因为当前任务有可能还没有完成。// 等待任务完成, 然后退出线程, 一般情况下会在 exit() 后边调用这个函数
bool QThread::wait(unsigned long time = ULONG_MAX);
信号槽
// 和调用 exit() 效果是一样的
// 在用这个函数之后, 再调用 wait() 函数
[slot] void QThread::quit();// 启动子线程
[slot] void QThread::start(Priority priority = InheritPriority);// 线程退出, 可能是会马上终止线程, 一般情况下不使用这个函数
[slot] void QThread::terminate();// 线程中执行的任务完成了, 发出该信号
// 任务函数中的处理逻辑执行完毕了
[signal] void QThread::finished();// 开始工作之前发出这个信号, 一般不使用
[signal] void QThread::started();
静态函数
// 返回一个指向管理当前执行线程的QThread的指针
[static] QThread *QThread::currentThread();// 返回可以在系统上运行的理想线程数 == 和当前电脑的 CPU 核心数相同
[static] int QThread::idealThreadCount();// 线程休眠函数
[static] void QThread::msleep(unsigned long msecs);	// 单位: 毫秒
[static] void QThread::sleep(unsigned long secs);	// 单位: 秒
[static] void QThread::usleep(unsigned long usecs);	// 单位: 微秒
子线程任务 处理函数
// 子线程要处理什么任务, 需要写到 run() 中
[virtual protected] void QThread::run();

1)如果想让创建的子线程执行某个任务,需要写一个子类让其继承QThread,并且在子类中重写父类的run()方法
2)这是一个受保护的成员函数,不能够在类的外部调用,需要通过当前线程对象调用槽函数 start() 启动子线程。

子线程创建 (方式一)(适合简单的线程处理)

1)创建一个线程类,让其继承QT中的线程类 QThread

2)重写父类的 run() 方法,在该函数内部编写子线程要处理的具体的业务流程

3)在主线程中new一个子线程对象

4)启动子线程, 调用 start() 方法

注意事项

主线程子线程之间如果要进行数据的传递,需要使用Qt中的信号槽机制

在Qt中在子线程中不要操作程序中的窗口类型对象, 不允许, 如果操作了程序就挂了

只有主线程才能操作程序中的窗口对象, 默认的线程就是主线程

子线程创建(方式二)(适合复杂线程处理)

1)创建一个新的类,让这个类从QObject派生

2)在这个类中添加一个公共的成员函数,函数体就是我们要子线程中执行的业务逻辑

3)在主线程中创建一个 QThread 对象, 这就是子线程的对象

4)在主线程中创建工作的类对象(千万不要指定给创建的对象指定父对象)

5)将 myWork 对象移动到创建的子线程对象中, 需要调用 QObject 类提供的 moveToThread() 方法

6)启动子线程,调用 start(), 这时候线程启动了, 但是移动到线程中的对象并没有工作

7)调用 myWork 类对象的工作函数,让这个函数开始执行,这时候是在移动到的那个子线程中运行的

注意

最后一步,执行工作函数时需要用到信号槽去开启。
在这里插入图片描述

其他

计算一段程序的执行时间
	#include <QElapsedTimer>	QElapsedTimer time; //创建对象time.start();   //计时开始
//	for(int i=0; i<m_num; ++i)
//	{
//	    list.push_back(qrand()%10000);
//	}int mlisec = time.elapsed();    //计时结束qDebug()<< "生成随机数总共用时:" << mlisec << "毫米秒";
处理 lambda 表达式不兼容的 变量类型
qRegisterMetaType<QVector<int>>("QVector<int>");

在这里插入图片描述

详细教程可转

爱编程的大丙

http://www.yayakq.cn/news/738462/

相关文章:

  • 网站服务器买了后怎么做网络营销招聘岗位有哪些
  • 广西自治区集约化网站建设要求互联网开发是做什么的
  • 做暧暧网站免费网站建设招聘条件
  • 去了哪找网站建设公司建站行业市场分析
  • 怎样做集装箱网站做网站需要买什么东西
  • 石家庄企业商城版网站建设wordpress评分点评
  • 物流网站 源码wordpress购物车保存
  • 深圳企业模板建站wordpress模板 科技
  • 猪八戒网网站开发需求网站建设基本模板介绍
  • 推广网站的几种方法怎样设计一个网站
  • 网站ip地址查询搭建农村电商平台
  • 深圳排名网站小白怎么做跨境电商
  • 住建部网站2015年城市建设统计观澜做网站公司
  • 单位网站设计制作唐山网站建设唐山做网站
  • 中国建设银行陕西分行官方网站c2c模式类型
  • 局域网站建设装修公司加盟品牌
  • 企业网站建设专家开公司要多少注册资金
  • 淘宝做网站为什么那么便宜中英文网站英文
  • 深圳建设培训中心网站免费响应式模板网站模板下载
  • 南昌的网站推广公司线上营销推广方式
  • 深圳网站建设空间wordpress 排除指定分类
  • 个人如何建设网站wordpress微信分享代码
  • 大家都在哪些网站做宣传惠山网页制作
  • 在线销售网站设计文献iis里如何装php网站
  • 网站开发运营推广叫什么佳木斯市城乡建设局网站
  • 甘肃省建设厅官方网站石家庄网站建设外包公司哪家好
  • 网站备案号有什么用学做转手绘的网站
  • 东莞网站建议wordpress 文章宽度
  • 兴化网站网站建设青岛seo网站排名
  • 聊城网站设计第三方商城网站开发