是否可以将成员函数移动到新的Thread而不是整个类?
将此置于上下文中:
class FooBar : public QObject {
Q_OBJECT
// some other function that deals with the UI changes
private:
get foo();
};
是否可以仅将foo()
移动到新线程?整个类有很多UI调用和其他可能不是线程安全的组件。我将非常感谢任何帮助,否则我将不得不重新组织课程并将foo()
移动到新对象。
答案 0 :(得分:1)
您无法将函数移动到这样的线程。 moveToThread
将该对象的affinity更改为该线程。这或多或少意味着该对象的信号将被发送到新线程的事件循环。
我认为您正在为这类任务寻找QtConcurrent
:
QtConcurrent :: run()函数在一个单独的线程中运行一个函数。 函数的返回值通过QFuture提供 API。
extern void aFunctionWithArguments(int arg1, double arg2, const QString &string);
int integer = ...;
double floatingPoint = ...;
QString string = ...;
QFuture<void> future = QtConcurrent::run(aFunctionWithArguments, integer, floatingPoint, string);
有关详细信息,请参阅Qt Concurrent Framework和QFuture。