在QT中是否存在类似GCD的多线程方法?

时间:2013-08-21 10:27:47

标签: multithreading qt grand-central-dispatch

我是Qt的新手,我在QT上阅读了一篇关于多线程的文章。似乎这样做的最佳方法是创建一个派生自QThread并实现run方法的类。在Objective-C和GCD下,您可以使用块(函数指针类型),只需将它们传递给队列就可以了。我认为这很奇怪,每当我想要将某些东西交换到另一个线程时,为该特定任务创建一个新类。

所以现在我的问题是,是否可以将函数指针传递给QT中Objective-C下的GCD之类的线程处理?

2 个答案:

答案 0 :(得分:3)

Qt线程的最佳方法是 NOT 从QThread派生。如果您这样做,请阅读有关you're doing it wrong

的原因

相反,创建一个QThread对象并将小部件移动到该线程。

QThread pThread = new QThread(parentObject);
//Assuming we have a class based on QObject
myObject->moveToThread(pThread);  // move our object to the thread
pThread->start(); // start the thread

然后,您可以使用信号和插槽与线程和对象进行通信。 通过这种方式,您还可以将多个对象移动到新线程,而不必再为每个类创建一个新的,继承的QThread对象。

答案 1 :(得分:1)

是的,您可以使用Qt Concurrent框架在不同的线程中运行函数。 来自docs的一个例子:

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);

http://qt-project.org/doc/qt-4.8/qtconcurrentrun.html