1、QThreadPool线程池的使用,线程和Widget通过QMetaObject::invokeMethod交互。
自定义一个QThreadPool,N个线程QRunnable,线程和Widget通过QMetaObject::invokeMethod交互。
QRunnable非继承自QObject,所以不可以用信号和槽的方式和Widget主界面交互,为了和Widget主界面交互,可以用QMetaObject::invokeMethod进行交互。
1、创建一个Widget工程,并在Widget类下定义一个QThreadPool的私有变量MyThreadPool;
2、在Widget的构造函数中设置MyThreadPool的属性,如:setMaxThreadCount(1)等等。
3、新建一个私有槽函数 void showinfo(QString str);
4、在Widget.cpp实现该函数,将str信息显示到界面的QLineEdit编辑框。
5、在Widget的ui界面添加一个按钮,用于MyThreadPool创建一个任务,添加一个QLineEdit编辑框,用于显示str。
6、为了和Widget交互,需要对QRunnable进行自定义封装,在构造函数中将Widget指针传递进去。
代码如下:
Widget.h
#ifndef WIDGET_H
#define WIDGET_H #include <math.h>
#include <QWidget>
#include <QLineEdit>
#include <QThreadPool>
//////////////////////////////////////////////////////
namespace Ui {
class Widget;
}
class Widget : public QWidget {
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_emit_Btn_clicked();
void Update_Result(QString); private:
Ui::Widget *ui;
QThreadPool MyThreadPool;
};
Widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "qmyrunnable.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
MyThreadPool.setMaxThreadCount(1);
MyThreadPool.setParent(this);
}
Widget::~Widget()
{
MyThreadPool.waitForDone();
delete ui;
} void Widget::Update_Result(QString str)
{
ui->lineEdit_1->setText(str);
}
void Widget::on_emit_Btn_clicked()
{
MyThreadPool.start(new QMyRunnable(this));
}
QMyRunnable.h
#ifndef QMYRUNNABLE_H
#define QMYRUNNABLE_H
#include <QTest>
#include <QRunnable> class QMyRunnable : public QRunnable
{
public:
QMyRunnable(QObject* obj); protected:
void run();
private:
QObject* obj;
};
QMyRunnable.cpp
#include "qmyrunnable.h"
#include "widget.h"
QMyRunnable::QMyRunnable(QObject* obj) : obj(obj)
{
}
void QMyRunnable::run()
{
QString str = QString("%1+%2=%3").arg(1).arg(1).arg(1+1);
QMetaObject::invokeMethod(obj,"Update_Result",Q_ARG(QString,str));
QTest::qWait(100);
}
main.cpp
#include <QtGui/QApplication>
#include "widget.h" int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
1、QThreadPool线程池的使用,线程和Widget通过QMetaObject::invokeMethod交互。的更多相关文章
- Java多线程系列--“JUC线程池”01之 线程池架构
概要 前面分别介绍了"Java多线程基础"."JUC原子类"和"JUC锁".本章介绍JUC的最后一部分的内容——线程池.内容包括:线程池架构 ...
- Java多线程系列--“JUC线程池”02之 线程池原理(一)
概要 在上一章"Java多线程系列--“JUC线程池”01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析Th ...
- Java多线程系列--“JUC线程池”03之 线程池原理(二)
概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...
- Java多线程系列--“JUC线程池”04之 线程池原理(三)
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介绍线程池的生命周期.在"Java多线程系列--“基础篇”01之 基 ...
- Java多线程系列--“JUC线程池”05之 线程池原理(四)
概要 本章介绍线程池的拒绝策略.内容包括:拒绝策略介绍拒绝策略对比和示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3512947.html 拒绝策略 ...
- 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程
额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...
- 通过设置线程池的最小线程数来提高task的效率,SetMinThreads。
http://www.cnblogs.com/Charltsing/p/taskpoolthread.html task默认对线程的调度是逐步增加的,连续多次运行并发线程,会提高占用的线程数,而等若干 ...
- 内存池、进程池、线程池介绍及线程池C++实现
本文转载于:https://blog.csdn.net/ywcpig/article/details/52557080 内存池 平常我们使用new.malloc在堆区申请一块内存,但由于每次申请的内存 ...
- Executors提供的四种线程池和自定义线程池
JAVA并发编程——EXECUTORS 线程池的思想是一种对象池的思想,开放一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理.当有线程任务时,从池中取一个,执行完毕,对象 ...
随机推荐
- 【学习笔记】Spring AOP注解使用总结
Spring AOP基本概念 是一种动态编译期增强性AOP的实现 与IOC进行整合,不是全面的切面框架 与动态代理相辅相成 有两种实现:基于jdk动态代理.cglib Spring AOP与Aspec ...
- 一些js的小技巧
这里收集了一些编码上的小技巧,大家可以学习学习. 1.浮点转整型 使用|0快速转换 var a=(12.002)|0;//12 使用~~快速转换 ~取反运算符,2=0010,~2=1101,因为第一位 ...
- JQuery插件autocomplete使用说明文档
项目中有时会用到ajax自动补全查询,就像Google的搜索框中那样,输入汉字或者字母的首个字母,则包含这个汉字或者字母的相关条目会显示出来供用户选择,该插件就是实现这样的功能的.autocomple ...
- Servlet笔记9--转发与重定向
关于Web中资源跳转的问题: 转发和重定向基本代码: package com.bjpowernode.javaweb; import java.io.IOException; import javax ...
- python2.7中MySQLdb的安装与使用详解
Python2.7中MySQLdb的使用 import MySQLdb #1.建立连接 connect = MySQLdb.connect( '127.0.0.1', #数据库地址 'root', # ...
- 【Python】使用Python将Shellcode转换成汇编
1.介绍 需要多少行代码转换hex成反汇编呢? 多亏了Python的Capstone库,做这件事只需要五行. 在二进制分析中,进行Exploit开发或逆向工程时,需要快速将十六进制的Shellcode ...
- BAT获取FTP指定文件
以下两个文件放在同一目录下 getfile.bat文件内容如下: @echo offftp.exe -i -s:getfile.txt 192.168.1.2(更换成你的ip,参数之间有空格)paus ...
- 从Dying gasp功能看Linux的响应速度(zhuan)
转自https://blog.csdn.net/qq_20405005/article/details/77967358 前一阵子在做dying gasp功能测试,过程中恰好测试到了Linux的响应速 ...
- js array数组检测方式
typeof var arr = [1,2,3]; console.log(typeof arr);//'object' 数组的本质是一种特殊的对象,所以返回'object'.typeof运算符只能用 ...
- 使用管道和cronolog切割日志
安装cronolog git clone https://github.com/fordmason/cronolog ./configure make && make install ...