线程使用方法之run
来源:互联网 发布:碳青霉烯 知乎 编辑:程序博客网 时间:2024/06/04 23:39
thread.h
#ifndef THREAD_H#define THREAD_H#include <QThread>class Thread : public QThread{ Q_OBJECTpublic: explicit Thread();protected: void run();signals: void sendCloseFlag(int);};#endif // THREAD_H
thread.cpp
#include "thread.h"#include <QDebug>#include <QWidget>Thread::Thread(){}void Thread::run(){ qDebug() << "thread run: " << thread()->currentThreadId();// QWidget *w = new QWidget;//ASSERT failure in QWidget: "Widgets must be created in the GUI thread.", file kernel\qwidget.cpp, line 1126 for(int i = 0; i < 5000; i++)//不打印信息,1亿次需要半秒不到,10亿次需要2秒 { qDebug() << i << endl; } sendCloseFlag(1);}
widget.h
namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget();private: Ui::Widget *ui;private: int closeFlag;public slots: void setCloseFlag(int);};
widget.cpp
#include "widget.h"#include "ui_widget.h"#include <QDebug>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); qDebug() << "widget thread: " << thread()->currentThreadId(); closeFlag = 0;}Widget::~Widget(){ qDebug() << "~Widget()"; delete ui;}void Widget::setCloseFlag(int flag){ closeFlag = flag; close();}
main.cpp
#include "widget.h"#include <QApplication>#include <QDebug>#include "thread.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); qDebug() << "main thread: " << qApp->thread()->currentThreadId(); Widget w; w.show(); Thread thread; QObject::connect(&thread, SIGNAL(sendCloseFlag(int)), &w, SLOT(setCloseFlag(int))); thread.start(); return a.exec();}
注意点:
1. 线程里面不能直接操作UI。
2. 只有线程的run方法才会进入新线程中,其他都是属于主线程。
阅读全文
0 0
- 线程使用方法之run
- QT 线程之 QtConcurrent::run()
- 线程使用方法之moveToThread
- 线程与run loop
- Thread(线程),run(),start()
- 线程使用方法
- Docker run 命令的使用方法
- Docker run 命令的使用方法
- Docker run命令的使用方法
- Docker run 命令的使用方法
- Docker run 命令的使用方法
- 线程嵌套线程,线程run里面同步
- Java 线程run start区别
- 使用QtConcurrent::run创建线程
- 线程的run和start
- 线程 Thread Runnable start run
- Android 之 View线程 run方法和draw方法执行的先后顺序
- java之Thread线程相关yield()、sleep()、wait()、join()、run和start区别详解
- navicat快捷键
- 如何报销劳务费?
- HTTP the definitive guide
- 搜索-F
- mybatis学习:五
- 线程使用方法之run
- Java反射
- 针对Android4.4以上版本,通过uri获取 data为null问题解决方案
- lintcode(622)Frog Jump
- STM32实现IAP功能的学习笔记
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Java中的控制执行与流程
- Java 基本数据类型
- opentsdb