调用moveToThread()不会将QObject移动到另一个线程。

时间:2011-11-22 04:51:23

标签: c++ multithreading qt

functionClass成为派生自QObject的类。在我的QMainWindow类的类构造函数中(没有启动任何其他线程)我有以下代码:

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()功能会打印相同的内容?

1 个答案:

答案 0 :(得分:10)

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

functionClassObj->currentThreadId();

相当于

QThread::currentThreadId();

这意味着无论您使用或不使用任何对象来调用该函数,您都将获得相同的返回值。

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

如果要获取对象具有亲和力的线程对象的引用,请改用QObject::thread()