QThread错误,未在此范围内定义

时间:2015-06-16 14:43:28

标签: c++ multithreading qt qthread

我希望得到一些帮助,找出我在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--;
      }

问题吧,我收到的错误是

的timeThread
currentTimeThread timeThread

未声明。有什么问题?

2 个答案:

答案 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,只需使用他们为你提供的课程。

您案例中的方案如下:

  • 使用循环创建一个类
  • 在此类上创建一个插槽,这是一个可以调用的方法 来自另一个主题。
  • 从主类中创建一个loopClass的实例和另一个QThread
  • 使用QthreadObject作为参数
  • 在moveObject上使用movetothread
  • 向loopObject的插槽发送信号,以便它可以开始工作

您可以在本文中看到完整的说明:  https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/ 它给了我很多帮助;)

抱歉,我现在还没时间编写一个完整的例子,如果你需要它让我知道,我可以借给你一个后手。