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

The*_*uzz 4 c++ qt multithreading

让我们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
Run Code Online (Sandbox Code Playgroud)

currentThreadId()如果我打电话,为什么功能打印相同的东西moveToThread()

Chr*_*ris 10

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

functionClassObj->currentThreadId();
Run Code Online (Sandbox Code Playgroud)

相当于

QThread::currentThreadId();
Run Code Online (Sandbox Code Playgroud)

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

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

如果要获取对象具有亲缘关系的线程对象的引用,请QObject::thread()改用.