21,488
社区成员
发帖
与我相关
我的任务
分享#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
#include <QDebug>
#include <QMutex>
class MyThread : public QThread
{
Q_OBJECT
public:
void setData(double d1,double d2);
MyThread();
~MyThread();
private slots:
void runslot(const double d1,const double d2);
void stopslot(void);
signals:
void callFather(void);
protected:
void run() override;
private:
double data1;
double data2;
bool is_stop;
QMutex mutex;
};
#endif // MYTHREAD_H
#include "mythread.h"
MyThread::MyThread()
{
is_stop = false;
}
MyThread::~MyThread()
{
}
void MyThread::runslot(const double d1,const double d2)
{
int i = 0;
while(true)
{
qDebug()<<i++<<d1<<" "<<d2<<endl;
mutex.tryLock();
if(is_stop || i == 100)
{
mutex.unlock();
qDebug()<<"call father";
emit callFather();
break;
}
else{
mutex.unlock();
}
msleep(100);
}
//emit callFather();
}
void MyThread::run()
{
//is_stop = false;
//exec();
}
void MyThread::stopslot(void)
{
mutex.tryLock();
is_stop = true;
mutex.unlock();
}
void MyThread::setData(double d1,double d2)
{
data1 = d1;
data2 = d2;
}
#ifndef TEST0517_H
#define TEST0517_H
#include <QtGui/QMainWindow>
#include "ui_test0517.h"
#include <QDebug>
#include "mythread.h"
class Test0517 : public QMainWindow
{
Q_OBJECT
public:
Test0517(QWidget *parent = 0, Qt::WFlags flags = 0);
~Test0517();
MyThread *mythread;
//bool stoped = false;
// QMutex m_mutex;
private:
Ui::Test0517Class ui;
signals:
void operate_start(double d1,double d2);
void operate_stop(void);
private slots:
void on_pushButton_2_clicked();
void on_pushButton_clicked();
void closeThread();
};
#endif // TEST0517_H
#include "test0517.h"
#include <QMessageBox>
Test0517::Test0517(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
mythread = new MyThread();
connect(this,SIGNAL(operate_start(double,double)),mythread,SLOT(runslot(double,double)));
connect(this,SIGNAL(operate_stop(void)),mythread,SLOT(stopslot(void)));
connect(mythread,SIGNAL(callFather(void)),this,SLOT(closeThread(void)));
mythread->start();
//QObject::connect(this,SIGNAL(operate_stop),&mythread,SLOT(runslot));
//connect(this,SIGNAL(operate_stop),&mythread,SLOT(stopslot));
}
Test0517::~Test0517()
{
}
void Test0517::on_pushButton_clicked()
{
emit operate_start(1.5,1.5);
//mythread.start();
}
void Test0517::on_pushButton_2_clicked()
{
emit operate_stop();
}
void Test0517::closeThread()
{
qDebug()<<"shutdown";
mythread->quit();
}