2011-11-22 37 views
4

functionClass是从QObject派生的类。在我QMainWindow类的类的构造函数(这还没有启动任何其他线程),我有以下代码:调用moveToThread()不会将QObject移动到另一个线程。

QThread workThread; 
functionClass *functionClassObj = new functionClass; 

cout << functionClassObj->thread()->currentThreadId() << endl; // prints 0x16c 
functionClassObj->moveToThread(&workThread); 
cout << functionClassObj->thread()->currentThreadId() << endl; // prints 0x16c 

为什么在currentThreadId()功能打印相同的事情,如果我做出moveToThread()打电话?

+2

与您的问题没有直接关系,但是在堆栈中分配QThread对象并不是一个好主意,因为它将在QMainWindow构造函数的末尾被销毁。 –

回答

10

currentThreadId()是QThread的静态成员。这意味着,

functionClassObj->currentThreadId(); 

相当于

QThread::currentThreadId(); 

,这意味着你会得到相同的回报值,而不管您使用或者不使用调用该函数的任何对象。

有问题的函数返回当前正在执行的线程的的ID,而不是您尝试调用它的对象的线程关系。

如果您想获得对该对象具有亲和力的线程对象的引用,请改为使用QObject::thread()

相关问题