我是 Qt 的新手,我读了一篇关于 QT 下的多线程的文章。似乎这样做的最佳方法是创建一个派生自 QThread 并实现 run 方法的类。在 Objective-C 和 GCD 下,您可以使用块(一种函数指针),您只需将它们传递给队列即可。我认为每次我想将某些东西交换到不同的线程时,为该特定任务创建一个新类是很奇怪的。
所以我现在的问题是,是否可以将函数指针传递给 QT 中 Objective-C 下的 GCD 之类的线程处理?
我是 Qt 的新手,我读了一篇关于 QT 下的多线程的文章。似乎这样做的最佳方法是创建一个派生自 QThread 并实现 run 方法的类。在 Objective-C 和 GCD 下,您可以使用块(一种函数指针),您只需将它们传递给队列即可。我认为每次我想将某些东西交换到不同的线程时,为该特定任务创建一个新类是很奇怪的。
所以我现在的问题是,是否可以将函数指针传递给 QT 中 Objective-C 下的 GCD 之类的线程处理?
Qt 线程的最佳方法不是从 QThread 派生。如果您这样做,请阅读此内容,了解您做错的原因。
相反,创建一个 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 对象。
是的,您可以使用 Qt Concurrent 框架在不同的线程中运行函数。来自文档的示例:
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);