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

4

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

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

2
虽然这与您的问题无关,但在堆栈上分配QThread对象并不是一个好主意,因为它将在QMainWindow构造函数结束时被销毁。 - Gareth Stockwell
1个回答

10

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

functionClassObj->currentThreadId();

等价于

QThread::currentThreadId();
这意味着,无论您使用或不使用任何对象调用函数,您将获得相同的返回值。
该函数返回当前正在执行的线程的ID,而不是您试图调用它的对象的线程亲和性。
如果您想获取对象具有亲和力的线程对象的引用,请改用 QObject::thread()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接