Qt---多线程的简单实现
2016-07-01 21:06
393 查看
workthread中实现run()函数,编写线程运行时的操作
threaddlg中建立线程数组,通过start(),terminate(),wait()来控制各线程的开启、结束
workthread.h
workthread.cpp
threaddlg.h
threaddlg.cpp
main.cpp
运行结果:
threaddlg中建立线程数组,通过start(),terminate(),wait()来控制各线程的开启、结束
workthread.h
#ifndef WORKTHREAD_H #define WORKTHREAD_H #include <QThread> class WorkThread : public QThread { Q_OBJECT public: WorkThread(); protected: void run(); //重新实现run函数 }; #endif // WORKTHREAD_H
workthread.cpp
#include "workthread.h" #include <QtDebug> WorkThread::WorkThread() { } void WorkThread::run() { while(true) { for(int n=0;n<10;n++) qDebug()<<n<<n<<n<<n<<n<<n<<n<<n; //为了效果明显,每个数字打印8次 } }
threaddlg.h
#ifndef THREADDLG_H #define THREADDLG_H #include <QDialog> #include <QPushButton> #include "workthread.h" #define MAXSIZE 5 class ThreadDlg : public QDialog { Q_OBJECT public: ThreadDlg(QWidget *parent = 0); ~ThreadDlg(); private: QPushButton *startBtn; QPushButton *stopBtn; QPushButton *quitBtn; public slots: void slotStart(); void slotStop(); private: WorkThread *workThread[MAXSIZE]; }; #endif // THREADDLG_H
threaddlg.cpp
#include "threaddlg.h" #include <QHBoxLayout> ThreadDlg::ThreadDlg(QWidget *parent) : QDialog(parent) { setWindowTitle(tr("线程")); startBtn = new QPushButton(tr("开始")); stopBtn = new QPushButton(tr("停止")); quitBtn = new QPushButton(tr("退出")); QHBoxLayout *mainLayout = new QHBoxLayout(this); mainLayout->addWidget(startBtn); mainLayout->addWidget(stopBtn); mainLayout->addWidget(quitBtn); connect(startBtn, SIGNAL(clicked()), this, SLOT(slotStart())); connect(stopBtn, SIGNAL(clicked()), this, SLOT(slotStop())); connect(quitBtn, SIGNAL(clicked()), this, SLOT(close())); } ThreadDlg::~ThreadDlg() { } void ThreadDlg::slotStart() { for(int i=0;i<MAXSIZE;i++) { workThread[i] = new WorkThread(); } for(int i=0;i<MAXSIZE;i++) { workThread[i]->start(); } startBtn->setEnabled(false); stopBtn->setEnabled(true); } void ThreadDlg::slotStop() { for(int i=0;i<MAXSIZE;i++) { workThread[i]->terminate(); //强制结束线程 workThread[i]->wait(); //将一个线程挂起,直到超时或者该线程被唤醒。 } startBtn->setEnabled(true); stopBtn->setEnabled(false); }
main.cpp
#include "threaddlg.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); ThreadDlg w; w.show(); return a.exec(); }
运行结果:
相关文章推荐
- Qt---快速建立对话框
- Qt之字典划词
- Qt之字典划词
- Qt Style Sheet实践(三):QCheckBox和QRadioButton
- QT生成PDF
- Qt之滚动字幕
- Qt之滚动字幕
- pyqt5 笔记(四)cx_Freeze 实现代码打包exe
- QT显示歌词渐变
- Qt:程序桌面图标生成
- qt-creator源码研究2
- VS2010与QT的集成开发环境
- QThread多线程编程经典案例分析
- QT在windows下的安装
- QT中窗口刷新事件的学习总结
- QT 网络编程
- 用QT 写的一个Log
- QTableview QSqlTableModel如何最恰当地只显示一个表中的某几个字段的数据
- QT延时:阻塞延时与非阻塞延时
- qt-creator源码研究与调试