为什么我不能在基于 QThread 的类中使用全局变量?



假设最小情况存在于Worker类中,其中包含一个基于QThread的名为Worker的类,以及另一个名为Parser的全局类。

# parser.h
class Parser;
extern Parser *App_Parser;
class Parser {
    bool init() { App_Parser = new Parser(); }
}
# parser.cpp
Parser *App_Parser = 0;
# worker.cpp
class Worker: public QThread {
    Worker(int thread_id , QObject *parent) {
        Parser::init ();
        connect ( App_Parser , .... , this , SLOT(parseCompleted()) );
    }
    private slots:
           void parseCompleted () { 
                qDebug() << "Thread ID: " << thread_id << " completed"; 
           }
}

所以问题来了,如果我在更高的类中创建了12 Worker,我有时会看到无效的thread_id,而且它总是在它上面一个,在这种情况下,总是13

如果我不使用App_Parser,而只是对一个简单的实例使用new Parser(),它就可以工作了。

所以我在思考为什么这里不应该使用全局变量。

阅读本文。它使Qt中的线程使用更加干净:http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/

整个问题是关于QObject住在哪里。当您创建新的Worker时,您将在主线程中创建QThread,因此它的所有事件/信号也将在主螺纹中解析。你误解了整个qt"线程的事情"。

相关内容

  • 没有找到相关文章

最新更新