0

我的线程检查.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();
            }

        }   

主要的.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 启动这个线程时,它没有显示任何输出槽永远不会执行。理想情况下,它应该继续打印你好。

请提出解决方案。

4

2 回答 2

3

删除 main 函数中的 while(1)。

于 2012-11-13T09:08:33.780 回答
1

没有太多关于它的噪音,子类化 QThreads 和覆盖 run() 方法不再是在 Qt 中使用线程的方式。

请阅读此博客。它为我节省了数小时的头痛。目前尚不清楚此更改何时发生,但该帖子中的示例代码现在在 Qt 5.x 的官方文档中

于 2013-12-13T19:56:07.250 回答