调用 moveToThread() 不会将 QObject 移动到另一个线程。
Calling moveToThread() doesn't move QObject to another thread.
设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()
函数打印相同的东西?
currentThreadId()
是QThread的静态成员。这意味着
functionClassObj->currentThreadId();
等价于
QThread::currentThreadId();
这意味着无论你使用或不使用任何对象来调用函数,你都将获得相同的返回值。
所讨论的函数返回当前正在执行的线程的id,而不是你试图调用它的对象的线程关联。
如果你想获得一个引用的线程对象,对象有亲缘关系,使用QObject::thread()
代替。
相关文章:
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 将 std::array 移动到另一个 std::array
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 如何将所有指针从一个向量移动到另一个向量?
- 如何有效地将(一些)项目从一个std::map移动到另一个std::map
- 如何将"this"的生命周期移动到C++中的另一个对象中?
- 基于范围的 for 循环将对象移动到另一个容器中?
- 将列表的对象C++移动到另一个对象
- 如何将文件移动到Qt中的另一个现有目录
- C++将所有文件从一个目录移动到另一个目录
- 发送到另一个窗口的鼠标移动消息不执行任何操作
- 将对象从一个 std::d eque 移动到另一个的更好方法
- 如果我尝试将对话框从一个项目移动到另一个项目,我是否需要从 rc 文件中复制 DESIGNINFO、对话框信息和AFX_
- Qt 创建者在我将项目移动到另一个地方后仍然使用源项目
- 从一个堆栈移动到另一个堆
- 当设置对象等于另一个函数的返回值时,为什么要调用移动构造函数/分配
- 使用 C++98 将矢量的一部分移动(而不是复制)到另一个矢量
- 将过滤器中的所有.cpp和.h移动到另一个项目并更正其文件夹位置
- C 可以使用MOVE SEMATICS将数据从一个向量移动到另一个向量