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