我的应用程序使用自定义序列化机制。
第一阶段:该机制在单独的线程上加载数据群集,创建所有适当的对象等等。
第二阶段:一旦它们全部被完全反序列化,它将它们交给主应用程序线程,并通过设置对象之间的连接等方式完成序列化。
这种机制是我框架的新添加 - 在此之前,我在主线程中反序列化所有内容。
我的问题是,在反序列化期间创建的某些对象是Qt对象(基本上是一堆小部件)。它们都记录了它们被创建的线程的ID。当“第二阶段”到来时,这些对象开始抱怨它们都不属于这个线程,因此不能发送任何信号等。
所以我在QObject上找到了一个叫做“moveToThread”的方法。然而,这个小东西并不是很有帮助,因为它执行检查并阻止从不同线程移动对象到当前线程(为什么会有这样的限制,我不知道)。
有人有想法如何解决这个问题吗?我可以保证对象只会在单独的线程上创建,并且从那时起,它们将全部生活和操作在主线程上。
谢谢, Paksas
第一阶段:该机制在单独的线程上加载数据群集,创建所有适当的对象等等。
第二阶段:一旦它们全部被完全反序列化,它将它们交给主应用程序线程,并通过设置对象之间的连接等方式完成序列化。
这种机制是我框架的新添加 - 在此之前,我在主线程中反序列化所有内容。
我的问题是,在反序列化期间创建的某些对象是Qt对象(基本上是一堆小部件)。它们都记录了它们被创建的线程的ID。当“第二阶段”到来时,这些对象开始抱怨它们都不属于这个线程,因此不能发送任何信号等。
所以我在QObject上找到了一个叫做“moveToThread”的方法。然而,这个小东西并不是很有帮助,因为它执行检查并阻止从不同线程移动对象到当前线程(为什么会有这样的限制,我不知道)。
有人有想法如何解决这个问题吗?我可以保证对象只会在单独的线程上创建,并且从那时起,它们将全部生活和操作在主线程上。
谢谢, Paksas
auto* p = new SomeQObject(); p.moveToThread(mainThread);
- jalf