我的threadcheck.h
#include <QThread>
#include <QDebug>
#include <QMutex>
class ThreadCheck : public QThread
{
Q_OBJECT
public:
explicit ThreadCheck(QObject *parent = 0);
int Val() const;
signals:
void signalReceived();
protected:
void run();
public slots:
void slotReceived();
private:
QMutex mutex;
int num;
};
我的threadcheck.cpp文件是
#include "threadcheck.h"
ThreadCheck::ThreadCheck(QObject *parent) :
QThread(parent)
{
connect(this,SIGNAL(signalReceived()),this,SLOT(slotReceived()));
num = 0;
}
int ThreadCheck::Val() const
{
return num;
}
void ThreadCheck::slotReceived()
{
mutex.lock();
qDebug() << "hello";
mutex.unlock();
}
void ThreadCheck::run()
{
while(1)
{
emit signalReceived();
}
}
main .cpp是
#include <QCoreApplication>
#include "threadcheck.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
ThreadCheck threadCheck;
threadCheck.start();
while(1);
return a.exec();
}
当我从main启动此线程时,它不会显示任何输出槽从不执行。 理想情况下,它应该继续打印你好。
请提出解决方案。
答案 0 :(得分:3)
删除主要功能中的while(1)。
答案 1 :(得分:1)
没有太大的噪音,对QThreads进行子类化并覆盖run()方法不再是在Qt中使用线程的方法了。
请阅读this blog。它为我节省了数小时的头痛。目前尚不清楚这种变化何时发生,但该帖子中的示例代码现在位于Qt 5.x的官方文档中