同一个按钮实现多次启动相同功能的子线程的任务。例如:第一次点击按钮,启动子线程完成相应的任务,完成任务后,再次点击按钮,完成相同的任务。
#include "mainwindow.h"
#include <QThread>
#include <QTime>
#include <QElapsedTimer>
#include <QTimer>
#include <QDebug>
#include <QDialog>
#include <QInputDialog>
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
worker = new Worker();
thread = new QThread(this);
worker->moveToThread(thread);
connect(this,SIGNAL(start_doWork4_signals()),worker,SLOT(doWork4()));
connect(worker,SIGNAL(task_doWork4_finished_signals()),this,SLOT(onT_task_doWork4_finished_signals()));
}
MainWindow::~MainWindow()
{
thread->quit();
thread->wait();
delete ui;
}
#include <QMessageBox>
#include <QInputDialog>
void MainWindow::on_btnThreadTest_clicked()
{
if(thread->isRunning()){
QMessageBox::warning(this,"警告","上一次测试还未结束,请稍后",QMessageBox::Ok);
return;
}
if(nullptr== thread){
qDebug()<<"正在创建thread"<<endl;
thread = new QThread(this);
}
if(nullptr == worker){
qDebug()<<"正在创建worker"<<endl;
worker = new Worker();
}
worker->moveToThread(thread);
connect(this,SIGNAL(start_doWork4_signals()),worker,SLOT(doWork4()));
connect(worker,SIGNAL(task_doWork4_finished_signals()),this,SLOT(onT_task_doWork4_finished_signals()));
thread->start();
ui->btnThreadTest->setEnabled(false);
emit start_doWork4_signals();
}
void MainWindow::onT_task_doWork4_finished_signals()
{
thread->wait(10);
thread->quit(