假设最小的大小写包含一个名为Worker
的类,基于QThread
,另一个名为Parser
,它是一个全局类,位于Worker
类中。
# 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
工作者,我有时会看到无效的thread_id
,并且它总是只有一个,在这种情况下,总是{{1 }}
如果我不使用App_Parser,只是使用13
作为一个简单的实例,它就可以工作。
所以我在想这里为什么不应该使用全局变量。
答案 0 :(得分:3)
阅读本文。它使Qt中的线程更加清晰:http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/
整个问题是关于QObject在哪里生活。当你创建新的Worker时,你在主线程中创建QThread,所以它的所有事件/信号也在主线程中解析。你误解了整个qt“线程事物”。