实现一个线程开启时,时间计时器任然能够计数,两路独立工作的线程功能。从类的帮助文件中可以看到如下信息,静态公共成员函数和保护类型的函数,在静态函数中有睡眠函数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();//按下按钮启动线程为第一步
}
 

最新文章

  1. 动态加载HTML后使用query修改标签样式
  2. Maven实战(六)依赖
  3. mysql 商品表的设计思路(面向对象建表:类与对象)
  4. Swagger PHP使用指南
  5. HDU 5273 Dylans loves numbers(水题)
  6. lintcode :sort letters by case字符大小写排序
  7. CSS3初步
  8. Javascript之模拟文字高亮
  9. vue 获取页面详情后 切换页面时 如何监听用户是否修改过信息
  10. Person Re-ID行人重试别梳理
  11. SVM理解
  12. 初学Python,对于开发工具不是很了解?一文带你选择适合你的开发工具
  13. struts2实现XML异步交互
  14. 4. Tomcat内存溢出解决
  15. MySql(十八):MySql架构设计——高可用设计之 MySQL 监控
  16. 队列(链式队列)----C语言
  17. Windows Server平台 confluence6.7.1安装与破解
  18. iptables 执行清除命令 iptables -F 要非常小心的
  19. addpath
  20. XDU 1140 寻找万神(字符串匹配)

热门文章

  1. Git Gui for Windows下载(pull)的正确操作方法
  2. CentOS6.5安装指定的PHP版本(php5.5)(转)
  3. Python学习小记(1)---import小记
  4. Spring boot内置Tomcat的临时目录被删除导致文件上传不了-问题解析
  5. C# DateTime 工具类
  6. js 预编译
  7. docker jenkins 前端node项目 自动化部署异常 env: ‘node’: No such file or directory
  8. MySql概述及入门(五)
  9. iMacros 入门教程-基础函数介绍(1)
  10. 获取Windows平台下 安装office 版本位数信息