实现一个线程开启时,时间计时器任然能够计数,两路独立工作的线程功能。从类的帮助文件中可以看到如下信息,静态公共成员函数和保护类型的函数,在静态函数中有睡眠函数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. pytorch ---神经网络语言模型 NNLM 《A Neural Probabilistic Language Model》

    论文地址:http://www.iro.umontreal.ca/~vincentp/Publications/lm_jmlr.pdf 论文给出了NNLM的框架图: 针对论文,实现代码如下: # -* ...

  2. sparc v8 汇编语言语法

    1.3.1 Labeling Format Symbol names beginning with a dot (.) are assumed to be local symbols. Names b ...

  3. hadoop简介和环境

            Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoop实现了一个 ...

  4. 用Docker部署自己的JupyterHub

    [话在前头] 用 Docker 部署 JupyterLab 感觉是部署 JupyterLab 最方便的方式了,官方提供了很多可选的镜像,也可以自己从 jupyter/base-notebook 中继续 ...

  5. node准备

    === 原生的api === express express  中间件相关的. https://juejin.im/post/5aa345116fb9a028e52d7217 推荐几篇入门的优质博客: ...

  6. 文本段落缩进text-indent:2em

    中文文字中的段前习惯空两个文字的空白,这个特殊的样式可以用下面代码来实现: p{text-indent:2em;} <p>1922年的春天,一个想要成名名叫尼克卡拉威(托比?马奎尔Tobe ...

  7. Android中调用另一个Activity并返回结果-以模拟选择头像功能为例

    场景 Android中点击按钮启动另一个Activity以及Activity之间传值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...

  8. codeforces 1301C Ayoub's function

    题目链接:http://codeforces.com/problemset/problem/1301/C 思路: 纯想想了一次,发现one_cnt >= zero_cnt的时候很简单,就是(n) ...

  9. Java数据结构--双向链表的实现

    #java学习经验总结------双向链表的实现 双向链表的建立与单链表类似,只是需要使用pre指针指向前一个结点,并且在删除添加时不仅仅考虑next package datastructure; p ...

  10. C#的委托案例

    C#实现(Delegate)的委托就不多说了,直接上代码,看代码中的注释: namespace Delegate { delegate void DGSayiHi(string name);//声明委 ...