Qt QThread 多线程使用
一、继承QThread 使用方法
1.创建个继承QThread的类。
#ifndef MYTHREAD_H
#define MYTHREAD_H #include <QObject>
#include<QThread>
#include<QtCore>
class MyThread : public QThread
{
Q_OBJECT
public:
explicit MyThread(QObject *parent = );
~MyThread(); public:
void run();
bool stop=false;
signals:
void NumberChanged(int number); }; #endif // MYTHREAD_H
#include "mythread.h" MyThread::MyThread(QObject *parent)
{ } MyThread::~MyThread()
{ } void MyThread::run()
{
for(int i=;i<;i++)
{
QMutex mutex;
mutex.lock();
if(this->stop)
{
break;
}
else
{
mutex.unlock();
} emit NumberChanged(i);
this->msleep(); } }
2.调用代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include<mythread.h>
namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow();
public:
MyThread *mThread; private:
Ui::MainWindow *ui; private slots:
void onNumberChanged(int number);
void on_btnStart_clicked();
void on_btnStop_clicked();
}; #endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); mThread=new MyThread(this);
QObject::connect(mThread,SIGNAL(NumberChanged(int)),this,SLOT(onNumberChanged(int))); } MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::onNumberChanged(int number)
{ ui->lblNumber->setText(QString::number(number));
} void MainWindow::on_btnStart_clicked()
{
mThread->start();
mThread->stop=false; } void MainWindow::on_btnStop_clicked()
{
//mThread->stop=true; mThread->stop=true; }
二、 moveToThread 使用方法
#ifndef MYOBJECT_H
#define MYOBJECT_H #include <QObject>
#include<QDebug>
#include<QThread>
#include<QLabel> class MyObject : public QObject
{
Q_OBJECT
public:
explicit MyObject(QObject *parent = );
~MyObject(); signals: public slots:
void Thread1();
void Thread2(QLabel *lbl);
void Thread3(); }; #endif // MYOBJECT_H
#include "myobject.h" MyObject::MyObject(QObject *parent) : QObject(parent)
{ } MyObject::~MyObject()
{ } void MyObject::Thread1()
{ qDebug()<<QThread::currentThreadId();
}
void MyObject::Thread2(QLabel *lbl)
{ for(int i=;i<;i++)
{}
lbl->setText("aaaaa");
qDebug()<<QThread::currentThreadId();
}
void MyObject::Thread3()
{
qDebug()<<QThread::currentThreadId();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include<myobject.h> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow(); private slots:
void on_pushButton_clicked(); void on_pushButton_2_clicked(); void on_pushButton_3_clicked(); void on_pushButton_4_clicked(); private:
Ui::MainWindow *ui; public:
MyObject *myobj; }; #endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); myobj=new MyObject;
QThread *mythread=new QThread;
myobj->moveToThread(mythread);
mythread->start(); connect(mythread,SIGNAL(started()),myobj,SLOT(Thread1())); } MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::on_pushButton_clicked()
{
myobj->Thread1(); } void MainWindow::on_pushButton_2_clicked()
{ myobj->Thread2(ui->label);
} void MainWindow::on_pushButton_3_clicked()
{
myobj->Thread3(); } void MainWindow::on_pushButton_4_clicked()
{
qDebug()<<QThread::currentThreadId();
}
Qt QThread 多线程使用的更多相关文章
- QThread多线程编程经典案例分析
传统的图形界面应用程序都只有一个线程执行,并且一次执行一个操作.如果用户调用一个比较耗时的操作,就会冻结界面响应. 一个解决方法是按照事件处理的思路: 调用 Void QApplication::pr ...
- QThread多线程编程经典案例分析(三种方法,解释了为什么使用moveToThread的根本原因,即为了避免调用QThread::exec() )
传统的图形界面应用程序都只有一个线程执行,并且一次执行一个操作.如果用户调用一个比较耗时的操作,就会冻结界面响应. 一个解决方法是按照事件处理的思路: 调用 Void QApplication::pr ...
- Qt搭建多线程Server
起因是MySQL在Android上没有驱动.也就是说,移动端想要访问远程数据库,必须通过一台(或多台)PC进行中转. 中转PC作为Server,接受来自移动端Socket访问数据库的要求,Server ...
- qt中多线程用法总结
1.多线程的理解 在操作系统中线程和进程划分. 操作系统可以同时执行多个任务,每个任务就是进程:进程可以同时执行多个任务,每个任务就是线程. 线程之间相互独立,抢占式执行.对于单核CPU来说同一时刻只 ...
- 基于QT的多线程server
// thread.cpp #include "thread.h" Thread::Thread(int socketDescriptor, QObject *parent) : ...
- Pyqt Smtplib实现Qthread多线程发送邮件
一. smtplib 的介绍 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]) SMTP类构造函数,表示与SMTP服务器之间的连接 ...
- Qt之多线程
源地址:http://blog.csdn.net/liuhongwei123888/article/details/6072320 Qt 是一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造 ...
- Qt在多线程中使用信号槽的示例
之前对线程理解得不深入,所以对Qt的线程机制没有搞清楚,今天写一篇文章总结一下,如有错误,欢迎指出. 首先需要理解线程是什么,线程在代码中的表现其实就是一个函数,只不过这个函数和主线程的函数同时运行, ...
- Qt中多线程问题
1. 出现的问题 编写视频解码器程序时,把解码那部分单独置于一个线程中进行处理,后来实际应用到项目中发现内存泄漏很严重 问题就出现在多线程中,每次视频解码器程序关闭时首先必须释放其所涉及的堆空间, 由 ...
随机推荐
- [Ljava.lang.String和java.lang.String区别
在做项目时报了一个got class [Ljava.lang.String的提示,当时看到[Ljava.lang.String这个时,感觉有点怪怪的,第一次遇到这种情况.最后在网上查了下才明白.是数组 ...
- 【转】随机函数 rand() srand() 以及seed的原理
from:http://blog.csdn.net/feige2008/article/details/6943885 标准库<cstdlib>(被包含于<iostream> ...
- PHP mkdir()无写权限的问题解决方法
这篇文章主要介绍了PHP mkdir()无写权限的问题解决方法,对umask做了详细解释以及mkdir()后没写权限的解决方法,需要的朋友可以参考下 使用mkdir创建文件夹时,发现这个函数有两个 ...
- jquery动态改变my97日期格式
$('#qsrq').unbind('focus'); $('#zzrq').unbind('focus'); $('#qsrq').bind('focus', function () { Wdate ...
- 删除某一BSC在某一时间段内的数据
DELETE FROM cdl_raw_do_12501_ztev8_sht_201509 WHERE call_start_time >= STR_TO_DATE( '2015-09-14 2 ...
- memcache安装
windows下访问 http://pecl.php.net/package/memcache/3.0.8/windows 下载对应版本memcache的dll文件添加到php目录ext下 PHP.i ...
- PHP Socket实现websocket(二)Socket函数
PHP socket函数是调用系统的的Socket函数,可以参考C语言的socket函数. Socket函数:http://php.net/manual/en/book.sockets.php 服务器 ...
- CSS中font-size、font-family、line-height顺序以及简写属性
顺序: font-size line-height font-family body { font-size: 12px}; h1 { font: bold 200%/1.2 ...
- 将一个div始终定位在屏幕中心
//div的id为box #box{ width:200px; heighti:200px; border:1px solid #f00; //重点是以下规则 position:absolute; t ...
- iOS开发——UI基础-KVO
KVO == Key Value Observing 作用: 可以监听某个对象属性的改变 一.使用KVO Person *p = [Person new]; p.name = @"chg&q ...