19、Qt线程(四):继承QRunnable类

一、功能说明

1、通过继承QRunnable,重写run的方式实现多线程

2、点击“开始”按钮启动子线程;

二、项目创建

1、新建Qt Widgets Application应用,名称为Runnable,基类选择QMainWindow;

2、MainWindow.ui中放入一个Push Button按钮,第一个text改为“开始”,objectNme改为startPushButton;

3、添加新的C++类,名称为MyRunnable,基类设置为QRunnable

4、注:

QRunnable的使用方式与QThread类似,但是QRunnable不能使用信号槽,可以使用QMetaObject::invokeMethod()

三、代码展示

1、myrunnable.h

#ifndef MYRUNNABLE_H
#define MYRUNNABLE_H#include <QRunnable>
#include <QWidget>class MyRunnable : public QRunnable
{
public:explicit MyRunnable();~MyRunnable();protected:void run();
};#endif // MYRUNNABLE_H

2、myrunnable.cpp

#include "myrunnable.h"
#include <QDebug>
#include <QThread>MyRunnable::MyRunnable()
{qDebug() << "MyRunnable(): " << QThread::currentThreadId();
}MyRunnable::~MyRunnable()
{qDebug() << "~MyRunnable(): " << QThread::currentThreadId();
}void MyRunnable::run()
{qDebug() << "MyRunnable::run()" << QThread::currentThreadId();
}

3、mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "myrunnable.h"namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_startPushButton_clicked();private:Ui::MainWindow *ui;MyRunnable *m_myRunnable;
};#endif // MAINWINDOW_H

4、mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QThread>
#include <QDebug>
#include <QThreadPool>MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{ui->setupUi(this);m_myRunnable = new MyRunnable;qDebug() << "MainWindow() " << QThread::currentThreadId();
}MainWindow::~MainWindow()
{if(!m_myRunnable){delete m_myRunnable;m_myRunnable = nullptr;}delete ui;
}void MainWindow::on_startPushButton_clicked()
{qDebug() << "on_startPushButton_clicked() " << QThread::currentThreadId();QThreadPool::globalInstance()->start(m_myRunnable);
}

四、运行测试

运行程序,点击开始,输出框输出如下信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript:学习笔记(9)——Promise对象

JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案&#xff0c;比传统的解决方案回调函数和事件更加合理和强大。如下面为基于回调函数的Ajax操作&#xff1a; request.onreadystatechange function () {if (request.readyState 4) {if (r…

支持java虚拟主机_为何缺乏支持Java的虚拟主机

现在很多站长们&#xff0c;都青睐于香港虚拟主机建站。现在常见的是asp和PHP的程序空间很多&#xff0c;但是Java的少之又少&#xff0c;下面小编我给大家聊一聊&#xff01;一、香港Java虚拟主机成本高使用Java程序建站&#xff0c;就必须要用支持Java程序的香港虚拟主机的了…

C#调用ORACLE存储过程返回结果集及函数

ORACLE段&#xff1a; 首先在ORACLE建立PACKAGE和PACKAGE BODY&#xff0c;将在这里面定义函数和存储过程返回结果集。 1&#xff1a;建立PACKAGE&#xff1a; CREATE OR REPLACE package SCOTT.pk_wt is type mytype is ref cursor; procedure p_wt(mycs out mytype); functio…

tab切换

(function(){var tit $("#tab a"),con $("#tcontent>div"),cur cur;tit.mousemove(function(){var index tit.index(this);$(this).addClass(cur).siblings().removeClass(cur);con.eq(index).show().siblings().hide();}); })();原生js的tab切换 v…

组件传参

props on emit自定义方法 ref slot 事件总线 vuex (详细等有空写&#xff0c;先记着) es6新特性转载于:https://www.cnblogs.com/mokani/p/10520714.html

cocos2dx java 调用lua_cocos2dx之C++调用Lua

1&#xff0e;引入头文件#include "cocos2d.h"#include "CCLuaEngine.h"USING_NS_CC;using namespace std;extern "C"{#include "lua.h"#include "lualib.h"#include "lauxlib.h"}2导入Lua文件如果是cocos2dx的Lu…

Mysql 监控小脚本

MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB公司开发&#xff0c;目前属于Oracle公司。Mysql是最流行的关系型数据库管理系统&#xff0c;在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一…

93号涨0.86元售6.2元/升 20日油价正式上调

93号涨0.86元售6.2元/升 20日油价正式上调 据悉&#xff0c;自6月20日起汽油、柴油价格每吨提高1000元&#xff0c;航空煤油价格每吨提高1500元。 上调后全国汽油、柴油平均零售价分别为&#xff1a;97号汽油6.6元/升&#xff0c;93号汽油6.2元/升&#xff0c;90号汽油5.8元/升…

eclipse 新建java无scr_解决eclipse中没有js代码提示的问题

自学js&#xff0c;发现eclipse中不管js文件、html文件、jsp文件没有都没js代码的提示&#xff0c;对于js代码也不报错&#xff0c;有时候就因为单词敲错却查了很久没查出来&#xff0c;很烦很难受。在网上找了很多方法&#xff0c;都没有解决&#xff0c;特别是有个在javascri…

C# 互通操作 (二)基础知识1

[DllImport("user32.dll", EntryPoint "MessageBox")] public static extern int DebugWin(int hwnd, string content, string lpcaption, int wType); 讲解下参数的含义EntryPoint 是指向Dll中的一个方法当设定了EntryPoint的指向后 自己定义的方法名就不…

python 细枝末节

1. print 自动换行 看区别 >>> for i in range(4): ... print i ... 0 1 2 3 >>> for i in range(4): ... print i, ... 0 1 2 3 第一个自动回车&#xff1b;第二个没有自动回车&#xff0c;空格隔开。 结论&#xff1a;print会在行尾自动加回车。…

美女MVP专访

博客园专访:中国最美丽的MVP请大家在专访页面中发表评论。制作花絮&#xff1a;在测试专访页面时&#xff0c;不小心发布到了新闻频道&#xff0c;立即引来了园友的热情评论。 推荐小组&#xff1a;转载于:https://www.cnblogs.com/cmt/archive/2008/07/14/1241994.html

鲁班学院java高级架构师_鲁班学院三期java架构师

架构&#xff0c;又名软件架构&#xff0c;是有关软件整体结构与组件的抽象描述&#xff0c;用于指导大型软件系统各个方面的设计。架构描述语言(ADL)用于描述软件的体系架构。现在已有多种架构描述语言&#xff0c;如Wright(由卡内基梅隆大学开发)&#xff0c;Acme(由卡内基梅…

java jconsole rmi 连接不上

今天在虚拟机开放远程jconsole连接&#xff0c;设置了jmxrote的参数 JAVA_OPTIONS"${JAVA_OPTIONS} -Dcom.sun.management.jmxremote"JAVA_OPTIONS"${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.port9000"JAVA_OPTIONS"${JAVA_OPTIONS} -Dcom.su…

ASP 判断Session变量是否存在的4种方法

如果去读取没有初始化的Session变量&#xff0c;将得到Empty值(空值)。所以可以利用该值来判断Session变量是否已经初始化。加入我们要判断名为sesName的变量是否已经建立&#xff0c;我们可以用以下4种方法&#xff1a;1 If Session("sesName") "" Then …

SRE(Simple Rule Engine) Document

What is a rule engine?什么是规则引擎&#xff1f;A Rule Engine is a software system that contains rules on behalf of another system. Many different kinds of rules can be contained in a rules engine: business, legal, company policy, navigation, computationa…

字符串匹配,KMP算法

KMP的详解见&#xff1a;https://segmentfault.com/a/1190000008575379 主要难点在于Next数组的理解&#xff0c;KMP是不需要回溯的匹配算法。 1 #include<iostream>2 #include<string>3 #include<vector>4 #define MAXSIZE 1005 using namespace std;6 /*为…

{}企业如何才能实现多方位网络营销

现在很多企业都在进行网络营销,但是网络营销取得显着效果的并不多.其中有各种原因.但是很多在网络营销方式取得显着效果的企业却都有个共同的特点,尝试了多种营销方式做多方位的网络营销.在现今网络平台多样化,网络营销竞争激烈的形式下,单一的营销模式确实无法取得好的效果,多…

关于23种设计模式的有趣见解

创建型模式 1、FACTORY —追MM少不了请吃饭了&#xff0c;麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西&#xff0c;虽然口味有所不同&#xff0c;但不管你带MM去麦当劳或肯德基&#xff0c;只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式…

java oracle 连接字符串函数_通过shell来比较oracle和java中的字符串使用

这些准备工作齐了之后&#xff0c;我们来从Java中的字符串使用入手来比较一下oracle中对于字符串的处理。java中有如下的一些函数&#xff0c;我会依次来做比较。public char charAt(int index)返回字符串中第index个字符&#xff1b;oracle中可以使用substr来简单实现&#xf…