moveToThread用于成员函数

时间:2014-10-30 14:43:15

标签: c++ qt5 qthread

是否可以将成员函数移动到新的Thread而不是整个类?

将此置于上下文中:

    class FooBar : public QObject {
    Q_OBJECT
    // some other function that deals with the UI changes    
    private:
        get foo();
    }; 

是否可以仅将foo()移动到新线程?整个类有很多UI调用和其他可能不是线程安全的组件。我将非常感谢任何帮助,否则我将不得不重新组织课程并将foo()移动到新对象。

1 个答案:

答案 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 FrameworkQFuture