我希望得到一些帮助,找出我在QThread的代码上出错的地方。这是第一次做线程并且一直在阅读和观看教程,但我仍然很难过。 Herr是我的代码
currentTimeThread.h(我的主题)
#ifndef CURRENTTIMETHREAD_H
#define CURRENTTIMETHREAD_H
#include <QtCore>
class currentTimeThread :public QThread
{
public:
currentTimeThread();
void run();
};
#endif // CURRENTTIMETHREAD_H
currentTimeThread.cpp
#include "currenttimethread.h"
#include <QtCore>
#include <QDebug>
#include "noheatmode.h"
currentTimeThread::currentTimeThread()
{
}
void currentTimeThread::run()
{
QTime time = QTime::currentTime();
QString sTime = time.toString("hh:mm:ss:ms");
noheatmode::ui->tempTimeNoHeatMode->append(sTime);
}
调用/启动线程时和我的noHeatMode.cpp
#include "noheatmode.h"
#include "ui_noheatmode.h"
#include "wiringPi.h"
#include "currenttimethread.h"
#include <QTime>
#include <QTextEdit>
#include <QTimer>
#include <QString>
noheatmode::noheatmode(QWidget *parent) :
QWidget(parent),
ui(new Ui::noheatmode)
{
ui->setupUi(this);
}
noheatmode::~noheatmode()
{
delete ui;
}
while(flowTime > 0)
currentTimeThread timeThread;
timeThread.start();
{// set second pin LED to flash according to dutyCycle
digitalWrite(2,1);
delay(onTime);
digitalWrite(2,0);
delay(offTime);
//set zero pin to be high while flowtime is more than 0
digitalWrite(0,1);
flowTime--;
}
问题吧,我收到的错误是
的timeThreadcurrentTimeThread timeThread
未声明。有什么问题?
答案 0 :(得分:1)
你在while循环中错位了大括号:
while(flowTime > 0)
{ // <---- HERE
currentTimeThread timeThread;
timeThread.start();
// set second pin LED to flash according to dutyCycle
digitalWrite(2,1);
delay(onTime);
digitalWrite(2,0);
delay(offTime);
//set zero pin to be high while flowtime is more than 0
digitalWrite(0,1);
flowTime--;
}
否则,代码等同于此
while (flowTime > 0)
{
currentTimeThread timeThread;
}
// timeThread doesn't exist anymore
// Rest of code
答案 1 :(得分:0)
我认为你已经成功了。当时(我认为我们正在谈论QT3),QT已经改变了他们使用线程的方式并且让我们,用户有点迷惑,但是当你得到它时很容易。 你永远不应该扩展QThread,只需使用他们为你提供的课程。
您案例中的方案如下:
您可以在本文中看到完整的说明: https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/ 它给了我很多帮助;)
抱歉,我现在还没时间编写一个完整的例子,如果你需要它让我知道,我可以借给你一个后手。