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

Calling moveToThread() doesn't move QObject to another thread.

本文关键字:移动 另一个 线程 QObject moveToThread 调用      更新时间:2023-10-16

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

QThread workThread;
functionClass *functionClassObj = new functionClass;
cout << functionClassObj->thread()->currentThreadId() << endl; // prints 0x16c
functionClassObj->moveToThread( &workThread );
cout << functionClassObj->thread()->currentThreadId() << endl; // prints 0x16c

如果我调用moveToThread(),为什么currentThreadId()函数打印相同的东西?

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

functionClassObj->currentThreadId();

等价于

QThread::currentThreadId();

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

所讨论的函数返回当前正在执行的线程的id,而不是你试图调用它的对象的线程关联。

如果你想获得一个引用的线程对象,对象有亲缘关系,使用QObject::thread()代替。