实现一个线程开启时,时间计时器任然能够计数,两路独立工作的线程功能。从类的帮助文件中可以看到如下信息,静态公共成员函数和保护类型的函数,在静态函数中有睡眠函数msleep毫秒级,sleep秒级,usleep微秒级。保护函数中有run虚函数,说明使用时可以重新定义,发生多态,为实现线程任务的关键函数。实现效果如下;在定时器计数时线程的run函数在执行一个5秒的睡眠功能。同步进行

mythread.h文件

 #ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread> class myThread : public QThread
{
Q_OBJECT
public:
explicit myThread(QObject *parent = ); protected:
void run();//线程任务在基类QThread为虚函数,从类QThread中继承并重新定义,发生多态
signals:
void isDone();
}; #endif // MYTHREAD_H

mythread.cpp文件

 #include "mythread.h"

 myThread::myThread(QObject *parent) : QThread(parent)
{ }
void myThread::run()
{
sleep();//线程任务为休眠5秒
emit isDone();//休眠5秒结束后触发一个完成信号
}
widget.h文件
 #ifndef WIDGET_H
#define WIDGET_H
#include "mythread.h"
#include <QWidget>
#include <QTimer>
namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = );
~Widget();
void dealTimeout();//计时器触发信号
private slots:
void on_pushButton_clicked();//按钮槽函数
void dealDone(); //线程结束槽函数
void stopThread(); //停止线程槽函数
private:
Ui::Widget *ui;
QTimer *myTimer;//建一个时间类型的对象指针
myThread *MYt;//建一个线程类型的对象指针
}; #endif // WIDGET_H
widget.cpp文件
 #include "widget.h"
#include "ui_widget.h"
#include "mythread.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
myTimer = new QTimer(this);
MYt = new myThread(this);
connect(myTimer,&QTimer::timeout,this,&Widget::dealTimeout);
//每隔100ms执行的动作
connect(MYt,&myThread::isDone,this,&Widget::dealDone);
//线程第二步,当线程完成时,触发线程完成信号
connect(this,&Widget::destroyed,this,&Widget::stopThread);
//线程第三步,当窗口关闭时,停止线程
}
void Widget::dealDone()
{
myTimer->stop();//计时停止
}
void Widget::stopThread()
{
MYt->quit();
MYt->wait();
delete MYt;//释放内存
}
void Widget::dealTimeout()
{
static int i = ;
i++;
ui->lcdNumber->display(i);//数码管显示当前计数
}
Widget::~Widget()
{
delete ui;
} void Widget::on_pushButton_clicked()
{
if(myTimer->isActive()==false)
{
myTimer->start();//按下按钮,时间没有开始计时则激活开始计时
}
MYt->start();//按下按钮启动线程为第一步
}
 

Qt多线程实现思路一的更多相关文章

  1. Qt多线程实现思路二

    建立一个继承于Qobject的类myThread 在类myThread中定义线程处理函数不必是思路一里的run(); 在窗口类中开辟一个自定义线程myThread的指针对象myT = new myTh ...

  2. 【QT】 Qt多线程的“那些事”

    目录 一.前言 二.QThread源码浅析 2.1 QThread类的定义源码 2.2 QThread::start()源码 2.3 QThreadPrivate::start()源码 2.4 QTh ...

  3. Qt 多线程和网络编程学习

    一,Qt多线程类学习 QThread类,开始一个新的线程就是开始执行重新实现QThread::run(),run()是默认现实调用exec(),QThread::start()开始线程的执行,run( ...

  4. 【转】Lua coroutine 不一样的多线程编程思路

    Lua coroutine 不一样的多线程编程思路 Sunday, Apr 26th, 2009 by Tim | Tags: coroutine, Lua 上周末开始看<Lua程序设计> ...

  5. [转] Qt 多线程学习

    Qt 多线程学习 转自:http://www.cnblogs.com/IT-BOY/p/3544220.html 最近的项目上用到了关于多线程的知识,自己也比较感兴趣,所以就拿了那本<C++ G ...

  6. QT多线程笔记

    1.QT多线程涉及到主线程和子线程之间交互大量数据的时候,使用QThread并不方便,因为run()函数本身不能接受任何参数,因此只能通过信号和槽的交互来获取数据,如果只是单方面简单交互数据还过得去, ...

  7. Qt多线程-总结QThread-QThreadPool-QtConcurrent

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-总结QThread-QThreadPool-QtConcurrent     本文 ...

  8. Qt多线程-QtConcurrent并行运算高级API

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QtConcurrent并行运算高级API     本文地址:http://tec ...

  9. Qt多线程-QThreadPool线程池与QRunnable

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QThreadPool线程池与QRunnable     本文地址:https:/ ...

随机推荐

  1. Java之——23种设计模式汇总

    在软件开发的历程中,正是无数前辈们本着追求完美的架构设计和代码设计的初心.经过无数前辈们的探索和努力,逐渐形成了一系列的设计原则和设计模式. 对于Java语言来说,通常包含有6大设计原则和23种设计模 ...

  2. js—求数组中的最大最小值

    参考链接:https://www.w3cplus.com/javascript/calculate-the-max-min-value-from-an-array.html Math.min.appl ...

  3. C++ substr 截取子串

    1. substr() 方法使用 string substr (size_t pos = 0, size_t len = npos) const;pos: 截取初始位置(从头开始截取pos=0)len ...

  4. 微信小程序入门笔记-小程序创建(2)

    1.工具下载 官方链接:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 我选用的是稳定版 macOS 2 ...

  5. ViewPager调用notifyDataSetChanged() 刷新问题解决方案

    一.问题来由 ViewPager控件很大程度上满足了开发者开发页面左右移动切换的功能,使用非常方便.但是使用中发现,在删除或者修改数据的时候,PagerAdapter无法像BaseAdapter那样仅 ...

  6. MYSQL使用group by,如何查询出总记录数

    比如有这样一条SQL,根据t.user_id,t.report_date两个字段统计 这样前端页面能展示数据,但往往需要一个总记录数,在有分页的情况下用到 一种解决方法是在外面套一层,然后对其coun ...

  7. 【转载】structlog4j介绍

    源文章:structlog4j介绍 结构化日志对于日志的收集的作用挺大的,根据自身的业务场景,基于SLF4J实现了structlog4j. 相关引用 Gradle // 基础包 compile 'te ...

  8. if 语句 总结笔记

    1.if 语句 语法: if(condition) statement1; else statement2; graph TD A[JAVA考试] -->|几天后| B(收到成绩单) B --& ...

  9. JS中let、var、const的区别

    先看let和var: 1. console.log(a); // undefined var a = 3; console.log(a); // Uncaught ReferenceError: Ca ...

  10. 【01】HTML_day01_02-认识HTML

    typora-copy-images-to: media 第01阶段.前端基础.认识HTML 学习目标 理解 HTML的概念 HTML标签的分类 HTML标签的关系 HTML标签的语义化 应用 HTM ...